- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试为Windows编写一个exe包装器。到目前为止,我已经掌握了一些基础知识。不过,我正在阅读的部分是“BOUND IMPORT Directory Table”(或“.idata”部分?),基本上是PE文件的该部分,其中包含加载程序需要导入的DLL列表。
我想知道哪种最好的方法是:
[A]找出IAT的位置(因为针对几个不同的.exe运行PEView似乎表明此列表可以包含在多个不同的位置),然后阅读该列表
或者
[B]只要找到一种方法即可直接读取exe需要导入的DLL列表。
有没有办法做到这一点?人们对IAT应该在哪里以及如何阅读它有什么进一步的建议吗?
最佳答案
是的,您可以通过遍历可执行文件的头来找到IAT。在winnt.h
中查找标题声明。
有关如何在标题中查找信息的详细信息,请参见MSDN杂志上的Matt Pietrek的系列文章“深入了解Win32便携式可执行文件格式”,第I和II部分。
您还可以从here获得实际的Microsoft PE规范。
TL; DR:基本上,查找顺序如下:
IMAGE_DOS_HEADER
结构。 e_lfanew
字段进入IMAGE_NT_HEADERS
结构。 OptionalHeader
进入IMAGE_OPTIONAL_HEADER
结构(尽管它的名字,它不再是可选的)。 DataDirectory[IMAGE_DIRECTORY_ENTRY_IMPORT]
到IMAGE_IMPORT_DESCRIPTOR
结构的数组。每个导入的DLL都有一个条目。该数组中的最后一个条目将被清零。 Name
字段是一个RVA,它指向DLL的名称。 FirstThunk
字段是指向该DLL的IAT的RVA,该IAT是IMAGE_THUNK_DATA
结构的数组。 关于c - PE格式-IAT问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7673754/
我需要验证给定的二进制文件是否是 PE 文件(例如,如果我将 JS/HTML 或 .class 文件重命名为 .exe 或 .dll),它不会仍然是 PE 文件。解析 PE 文件会给我关于这个问题的信
我想将一些二进制数据附加到我的可执行文件的末尾。这只是为了使我的程序成为一个文件。我尝试使用 UpdateResource 但我用我的特定数据在其中遇到了一些错误,所以我必须使用其他解决方案。所以我需
我知道还有其他一些类似的问题,无论是否是 StackOverflow。我为此研究了很多,但仍然没有找到单一的解决方案。 我正在做一个操作系统作为一个副项目。我一直在做汇编,但现在我想加入 C 代码。
Is the pointer to the PE-header at offset 0x3c in the PE-file always set to 0x80? 我想知道为什么这个指针会改变。我猜
我是操作系统编程的新手,我正在阅读一本书,其中给出了一个简单的内核示例,如下所示: main() { char *video_memory = 0xb8000; *video_memory
我正在用 C# 编写程序,在其中读取 PE 的字节。但是为了获得 RVA,我需要使用部分标题。我想知道节标题的最大数量是多少? 我试过谷歌,我看过这里,但我没有找到任何可以指向正确方向的东西 谢谢。
一个awesome article关于PE格式说明如下: Name. Each section header has a name field up to eight characters long,
我对他们为什么在这里使用 - 1 感到困惑。有人可以解释这条线在非常非常非常低级别的详细信息中所做的事情......不是它的减法 1 结构......我需要了解更多......关于低级别......谢
我可以成功地在内存中加载并运行x32 pe,但是当我调整变量使其与x64可执行文件一起使用时,该程序将无休止地启动其自身的数千个副本,直到您杀死该程序或耗尽内存,而不是从内存启动pe。 我已经进行了尽
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求提供代码的问题必须表现出对所解决问题的最低限度理解。包括尝试过的解决方案、为什么它们不起作用,以及预
我正在研究 PE 解析器,遇到了一些非常不寻常的事情。 PE 格式中目录的名称和顺序似乎因您查看的位置而异: 来自 PEReader (perdr) : #define IMAGE_DIRECTORY
我试图在IDA中找出一种方法,哪些导出是数据导出,哪些是实函数导出。 例如,让我们看一下Microsoft的msftedit.dll的导出条目: 虽然CreateTextServices是真正的导出函
有很多Windows PE 资源查看器程序。但它们是如何工作的?他们是否解码对 winapi 的函数调用,或者 PE 是否有一些 GUI 信息部分?就像 Android 有 XML GUI 定义一样?
我正在对 PE 文件进行一些批量分析,在解析 PE 文件的导入表时,我发现许多 PE 文件为给定的 DLL 导入了重复的条目...这是为什么?这在功能上提供了什么? 例如,example.exe 导入
我正在使用“PE 编辑器”检查 Windows 可执行文件,它显示入口点为 0x15B8,我们如何确定该入口点的地址为虚拟地址? 最佳答案 入口点是相对于模块的加载地址存储的。 模块可以通过设置 IM
根据这篇文章http://msdn.microsoft.com/en-us/library/ms809762.aspx?ppud=4 我们可以用自定义名称命名 PE 部分。 所以在一个 PE 文件中,
PE 加载器是否完全 加载了任何部分?或者是否加载了节标题中指定的每个节?在 ELF 程序中,应该加载的节头(称为程序头或段)是那些用 PT_LOAD 标记的。 PE项目中有类似的东西吗? 附言。我找
我查看了特定 DLL 的导出表,我在表中看到了一些奇怪的条目,所以我试图在 pecoff 规范中找到这个问题的答案,但没有找到任何答案,我希望有人可能有。 我在某个 DLL (Qt5Core.dll)
我已经问过类似的问题,"PE Header requirements" ,但我对它的答案并不满意。 我正在用 Java SE 1.6 构建一个汇编器/链接器。我已经阅读了大约 5 个关于 PE/COF
我正在“C/C++ - Win32API”环境中编写一个 dll。 我有一些常量变量(都是 DWORD 值和 LPWSTR/LPSTR 字符串),我必须启用用户修改。 我正在寻找的是(希望)一种工具,
我是一名优秀的程序员,十分优秀!