我正在编写一个程序,在其中映射.exe
内存中的PE 文件并“剖析”它。我正在.text
使用distorm反汇编器反汇编目标可执行文件的部分。
CALL
反汇编中的指令相对于RIP
寄存器有一个偏移量,例如:CALL QWORD [RIP+0xf8e]
。
我也在阅读Import Descriptor Table
,我可以在那里看到来自各种 .dll 的所有函数调用。
当使用 dumpbin.exe/section:.text /disasm
反汇编相同的目标时.exe
,虽然它显示相同的操作码ff 15 8e 0f 00 00
,但它以某种方式将此 RIP 偏移量转换为正确(且正确)的 Win32 函数(在我的程序中GetCurrentProcessId()
)被调用call qword ptr [__imp_GetCurrentProcessId]
。
我的问题是如何将CALL
我在反汇编中看到的每条指令“映射”/解析为特定的 Win32 API 调用,就像 dumpbin 那样,因为我不在调试器中运行这个程序,因此 IAT 不会被 Windows 覆盖加载程序以显示jmp
调用 Windows API的正确指令。是反汇编的问题吗?我可以使用各种 PE 结构以某种方式扣除这一点吗?