noble_shi
驱动牛犊
驱动牛犊
  • 注册日期2003-07-15
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分73分
  • 威望9点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
阅读:988回复:3

请指教!多谢了

楼主#
更多 发布于:2004-05-20 21:16
  最近用softice调试内核,发现如下难以理解的事情!
  在softice里使用命令:u zwcreatefile,现象如下:
  ntoskrnl!ZwCreateFile
  0008:804D1A46 MOV EAX, 00000020
  0008:804D1A4B LEA EDX, [ESP+04]
  0008:804D1A4F INT 2E

  让我感到奇怪的是:这些语句应该出现在ntdll.dll中就比较好理解了。因为上面的语句明显是要切入内核,这是ntdll要完成的功能呀!
  可是这里为什么出现在了ntoskrnl中,而且从这些代码所在的内存地址可以看出本身就在内核中(2G以上空间)。
   真是让人费解,希望各位大侠指教。
seaquester
驱动大牛
驱动大牛
  • 注册日期2002-05-22
  • 最后登录2016-06-16
  • 粉丝0
  • 关注0
  • 积分500分
  • 威望115点
  • 贡献值0点
  • 好评度107点
  • 原创分0分
  • 专家分52分
沙发#
发布于:2004-05-20 23:12
ntdll.dll导出的Zw*与Nt*实际指向同一函数。2000下此类函数利用Int 2E进入ring0,由KiSystemService分发服务。

ntoskrnl.exe导出的Nt*是为内核程序准备的,他们没有外包装,一开始就是函数的实现;Zw*进行了包装,它们的实质是用Int 2E重进入内核(对NT/2000而言),让KiSystemService分发,最后一般仍会进入同名的Nt*函数(若有的话)。
八风舞遥翩,九野弄清音。 鸣高常向月,善舞不迎人。
noble_shi
驱动牛犊
驱动牛犊
  • 注册日期2003-07-15
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分73分
  • 威望9点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-05-21 08:29
谢谢大侠解答!这个问题迷惑了我很长时间,呵呵。如果我在softice里想设置断点或者看ntdll.dll中的NtCreateProcess等函数,应该怎么做?
默认的bpx ntcreateprocess就将断点设置到ntoskrnl中了!
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
地板#
发布于:2004-05-21 09:53
bpx ntdll!ntcreateprocess
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
游客

返回顶部