【发布时间】:2021-04-19 16:46:40
【问题描述】:
我编写了以下非常简单的程序:
#include <Windows.h>
#include <stdio.h>
int wmain(void) {
DWORD dwProcId = GetCurrentProcessId();
HANDLE hProc = OpenProcess(0x0400, FALSE, dwProcId);
wprintf(L"Process handle is %p\n.", hProc);
return 0;
}
当我在 x64dbg(或任何其他调试器)上打开它时,我可以看到 IAT 位于 .rdata 部分的开头,它确实包含我使用的函数 GetCurrentProcessId 和 OpenProcess,和其他人。
但是,在接近文本部分的末尾,我看到了这段代码,它似乎也类似于跳转表: What is this table?
我也可以看到在 IAT 中导入的似乎被调用的函数,但是在我阅读的任何 PE 指南中都找不到对该表的任何引用。
这个表是什么?如何通过 PE 部分或结构以编程方式引用它?
【问题讨论】:
-
看起来像是对动态 C rtl dll 的引用。
-
当我点击/输入任何跳转时,我确实进入了
vcruntime140.dll或ucrtbase.dll。编译器或链接器把它放在那里?有没有办法通过 PE 部分以编程方式引用它?
标签: c disassembly portable-executable reversing