我正在编写一个程序,在其中映射.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 结构以某种方式扣除这一点吗?