Tag: 便携式可执行文件

PE格式 – IAT问题

我正在尝试为Windows编写一个exe包装器。 到目前为止,我已经掌握了一些基础知识。 我要做的部分是阅读“BOUND IMPORT目录表”(或.idata部分?),基本上是PE文件的一部分,其中包含加载程序需要导入的DLL列表。 我想知道最好的方法是: [A]找出IAT的位置(因为针对几个不同的.exe运行PEView似乎表明这个列表可以包含在多个不同的地方)然后读取列表 要么 [B]找到一种直接读取exe需要导入的DLL列表的方​​法。 有办法做到这一点吗? 有没有进一步的阅读,人们可以推荐IAT应该在哪里,如何读取它?

加载PE标头

基本上,我想要做的是找到PE文件的最后一部分。 我非常认真地阅读了PE规范,但我无法发现我的代码失败的地方。 PIMAGE_DOS_HEADER pidh = (PIMAGE_DOS_HEADER)buffer; PIMAGE_NT_HEADERS pinh = (PIMAGE_NT_HEADERS)(pidh + pidh->e_lfanew); PIMAGE_FILE_HEADER pifh = (PIMAGE_FILE_HEADER)&pinh->FileHeader; PIMAGE_OPTIONAL_HEADER pioh = (PIMAGE_OPTIONAL_HEADER)&pinh->OptionalHeader; PIMAGE_SECTION_HEADER pish = (PIMAGE_SECTION_HEADER)(pinh + sizeof(IMAGE_NT_HEADERS) + (pifh->NumberOfSections – 1) * sizeof(IMAGE_SECTION_HEADER)); buffer是包含加载的可执行文件的字节数组, pish是指向最后一部分的指针。 由于某种原因,似乎部门的数量超过20 000。 有任何想法吗 ? 提前致谢