你反汇编内核中的真正的NtReadFile函数了。应该是u ntdll!NtReadFile,而不是u nt!NtReadFile。
lkd> u ntdll!NtReadFilentdll!ZwReadFile:7c90e27c b8b7000000 mov eax,0B7h7c90e281 ba0003fe7f mov edx,offset SharedUserData!SystemCallStub (7ffe0300)7c90e286 ff12 call dword ptr [edx]7c90e288 c22400 ret 24h7c90e28b 90 nop
不同的Windows版本,实现细节有不同,你的可能是上面这个样子,注意call后面是一个函数指针。也就是说,这种情况下,SharedUserData!SystemCallStub是一个函数指针,它的内容才是真正的那小段代码的地址。
对于这种情况,应该先用dd显示出SystemCallStub的内容,然后再u:
lkd> dd SharedUserData!SystemCallStub l17ffe0300 7c90eb8blkd> u 7c90eb8bntdll!KiFastSystemCall:7c90eb8b 8bd4 mov edx,esp7c90eb8d 0f34 sysenter