最近在读《格蠹汇编》第八章时,书中提到在windbg中执行kn命令显示栈回溯,USER32!NtUserMessageCall调用了ntdll!KiFastSystemCall,但在windbg中执行uf USER32!NtUserMessageCall时,结果如下:
0:000> uf USER32!NtUserMessageCall
USER32!NtUserMessageCall:
77d194b2 b8cc110000 mov eax,11CCh
77d194b7 ba0003fe7f mov edx,offset SharedUserData!SystemCallStub (7ffe0300)
77d194bc ff12 call dword ptr [edx]
77d194be c21c00 ret 1Ch
USER32!NtUserMessageCall调用了SharedUserData!SystemCallStub中保存的值,SharedUserData!SystemCallStub是一个地址,这个值是0x7ffe0300,在windbg中查看7ffe0300处的值,
0:000> dd 7ffe0300
7ffe0300 7c92e4f0 7c92e4f4 00000000 00000000
7ffe0310 00000000 00000000 00000000 00000000
7ffe0320 00000000 00000000 00000000 00000000
7ffe0330 95ed03c5 00000000 00000000 00000000
7ffe0340 00000000 00000000 00000000 00000000
7ffe0350 00000000 00000000 00000000 00000000
7ffe0360 00000000 00000000 00000000 00000000
7ffe0370 00000000 00000000 00000000 00000000
<

本文介绍了在Windows XP系统中,通过windbg调试发现USER32!NtUserMessageCall调用实际上通过SharedUserData!SystemCallStub间接调用KiFastSystemCall。探讨了SystemCallStub存储的地址指向KiFastSystemCall的原因,以及在XP SP2和2003 SP1后,微软为了安全性将SharedUserData中的指令改为函数指针的转变。
最低0.47元/天 解锁文章

234

被折叠的 条评论
为什么被折叠?



