WinDbg中的运行时反汇编@ 00007ffda61c12e0
00007ffda61c12db call ntdll!NtQueryPerformanceCounter (00007ffda6213b30)
00007ffda61c12e0 mov eax,dword ptr [rsp+30h]
00007ffda61c12e4 mov rsi,qword ptr [rsp+40h]
00007ffda61c12e9 shl rax,20h
00007ffda61c12ed xor rax,qword ptr [rsp+30h]
00007ffda61c12f2 xor rax,rbx
00007ffda61c12f5 mov rbx,qword ptr [rsp+38h]
00007ffda61c12fa xor rax,rdi
00007ffda61c12fd add rsp,20h
00007ffda61c1301 pop rdi
00007ffda61c1302 ret
ntdll.dll二进制文件中与上述运行时地址(7ffda61c12e0)相对应的静态地址为4b2c12e0。我什至没有在IDA Pro中反汇编ntdll.dll中的地址。它显示:
.text:4B2C12DF test eax, eax
.text:4B2C12E1 js loc_4B30C906
.text:4B2C12E7 mov [esp+278h+var_255], 1
.text:4B2C12EC
.text:4B2C12EC loc_4B2C12EC: ; CODE XREF: LdrpPreprocessDllName(x,x,x,x)+4B66Bj
.text:4B2C12EC mov ecx, [esp+278h+var_254]
.text:4B2C12F0 xor ebx, ebx
.text:4B2C12F2 xor dl, dl
.text:4B2C12F4 mov [esp+278h+var_264], ebx
.text:4B2C12F8 mov [esp+278h+var_25D], dl
.text:4B2C12FC test byte ptr [ecx], 8
.text:4B2C12FF jnz loc_4B2C160B
.text:4B2C1305 mov edi, [esp+278h+var_25C]
.text:4B2C1309 xor al, al
.text:4B2C130B mov ecx, large fs:30h
.text:4B2C1312 mov [esp+278h+var_244], edi
显然,IDA Pro错误地分解了dll。如何使IDA Pro正确反汇编64位dll?
#1 楼
在64位Windows上,任何尝试访问C:\Windows\system32
的32位进程都透明地重定向到C:\Windows\SysWOW64
。 由于IDA(
idaq.exe
和idaq64.exe
都是32位进程),因此您实际上是在打开C:\Windows\SysWOW64\ntdll.dll
(这是一个32位文件)而不是C:\Windows\system32\ntdll.dll
。要打开正确的文件,将其从
C:\Windows\system32
复制到另一个目录,然后从那里打开。评论
谢谢,这是救命的。是的,我将dll从system32文件夹加载到IDA中。
–苏丹娜
16 Mar 10 '16 at 8:19
您能否接受答案,以便其他人知道问题已得到回答?
–TMR232
16 Mar 10 '16 at 11:29
评论
那是什么翻译?为什么不尝试搜索函数ntquery并查看对其的外部参照,而不是将任何内容翻译为任何内容抱歉,如果我的问题仍然不清楚:(。问题是IDA Pro 64位错误地反汇编了64位ntdll.dll(和其他dll)。它显示所有32位寄存器,而WinDbg显示64位寄存器。如果我可以使IDA Pro在64位dll上正常工作,这将大有帮助。
您是直接从system32将它们加载到IDA吗?