首页
社区
课程
招聘
[求助]Zw*&&Nt*函数的区别,读undocumented window2k secrects的困惑
发表于: 2009-2-18 19:59 5260

[求助]Zw*&&Nt*函数的区别,读undocumented window2k secrects的困惑

2009-2-18 19:59
5260
我在读undocumented window2k secrects,其中有这样一段(p76中文版)
你可能会奇怪为什么表B-1(位于附录B中)分别为ntdll.dll和ntoskrnl.exe提供了两列,其名称分别为:ntdll.Nt*、ntdll.Zw*和ntoskrnl.Nt*、ntoskrnl.Zw*。原因是,这两个模块导出了两组相互关联的Native API符号。在表B-1(位于附录B中)的最左列给出了所有名字中包含Nt前缀的符号。另一个集合包含相似的名字,不过由Zw前缀代替了Nt。反编译ndll.dll可看出每对符号都指向相同的代码。这看起来似乎是浪费内存。然而,如果你反编译ntoskrnl.exe,你就会发现Nt*符号指向实际的代码而Zw*指向INT 2eh stubs(如示列2-1列出的)。这意味着Zw*函数集合将从用户模式转入内核模式,而Nt*符号直接指向的代码会在模式切换后被执行

示例2-1:
    NtDeviceIoControlFile:
   mov eax, 38h
   lea edx, [esp+4]
   int 2Eh
   ret 28h
我用uf查看了该nt和zw函数,发现差距很大。 为什么作者说是“你就会发现Nt*符号指向实际的代码而Zw*指向INT 2eh stubs(如示列2-1列出的)。这意味着Zw*函数集合将从用户模式转入内核模式,而Nt*符号直接指向的代码会在模式切换后被执行” ?

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 225
活跃值: (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
怎么又有人问这个!你搜索下论坛, Google能搜索到很多的
2009-2-18 20:06
0
雪    币: 125
活跃值: (35)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
ntdll中的zw和nt是指向相同的代码,它们进入RING0后直接调用ntos中的nt
ntos中的zw要经过int 2e模拟从R3到R0的过程,再调用ntos中的nt
2009-2-19 11:01
0
游客
登录 | 注册 方可回帖
返回
//