- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在研究 PE 解析器,遇到了一些非常不寻常的事情。 PE 格式中目录的名称和顺序似乎因您查看的位置而异:
来自 PEReader (perdr) :
#define IMAGE_DIRECTORY_ENTRY_EXPORT 0 // Export Directory
#define IMAGE_DIRECTORY_ENTRY_IMPORT 1 // Import Directory
#define IMAGE_DIRECTORY_ENTRY_RESOURCE 2 // Resource Directory
#define IMAGE_DIRECTORY_ENTRY_EXCEPTION 3 // Exception Directory
#define IMAGE_DIRECTORY_ENTRY_SECURITY 4 // Security Directory
#define IMAGE_DIRECTORY_ENTRY_BASERELOC 5 // Base Relocation Table
#define IMAGE_DIRECTORY_ENTRY_DEBUG 6 // Debug Directory
#define IMAGE_DIRECTORY_ENTRY_ARCHITECTURE 7 // Architecture Specific Data
#define IMAGE_DIRECTORY_ENTRY_GLOBALPTR 8 // RVA of GP
#define IMAGE_DIRECTORY_ENTRY_TLS 9 // TLS Directory
#define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10 // Load Configuration Directory
#define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 11 // Bound Import Directory in headers
#define IMAGE_DIRECTORY_ENTRY_IAT 12 // Import Address Table
#define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT 13 // Delay Load Import Descriptors
#define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14 // COM Runtime descriptor
在PEInfo (更正为 0-base):
0 Export
1 Import
2 Resource
3 Exception
4 Security
5 Base Reloc
6 Debug
7 Copyright
8 Global Ptr
9 TLS
10 Load Config
11 Bound Import
12 IAT
13 COM
14 Delay Import
15 (reserved)
在CFF Explorer :
0 Export
1 Import
2 Resource
3 Exception
4 Security
5 Relocation
6 Debug
7 Architecture
8 (reserved)
9 TLS
10 Configuration
11 Bound Import
12 IAT
13 Delay Import
14 .NET MetaData
来自 WINE's winnt.h :
#define IMAGE_DIRECTORY_ENTRY_EXPORT 0
#define IMAGE_DIRECTORY_ENTRY_IMPORT 1
#define IMAGE_DIRECTORY_ENTRY_RESOURCE 2
#define IMAGE_DIRECTORY_ENTRY_EXCEPTION 3
#define IMAGE_DIRECTORY_ENTRY_SECURITY 4
#define IMAGE_DIRECTORY_ENTRY_BASERELOC 5
#define IMAGE_DIRECTORY_ENTRY_DEBUG 6
#define IMAGE_DIRECTORY_ENTRY_COPYRIGHT 7
#define IMAGE_DIRECTORY_ENTRY_GLOBALPTR 8 /* (MIPS GP) */
#define IMAGE_DIRECTORY_ENTRY_TLS 9
#define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10
#define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 11
#define IMAGE_DIRECTORY_ENTRY_IAT 12 /* Import Address Table */
#define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT 13
#define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14
这是一张表格:
+------+-------------------+-------------------+-------------------+-------------------+
| Dir# | WINE's winnt.h | PEReader | PEInfo | CFF Explorer |
+------+-------------------+-------------------+-------------------+-------------------+
| 0 | Export | Export | Export | Export |
| 1 | Import | Import | Import | Import |
| 2 | Resource | Resource | Resource | Resource |
| 3 | Exception | Exception | Exception | Exception |
| 4 | Security | Security | Security | Security |
| 5 | Relocation | Relocation | Relocation | Relocation |
| 6 | Debug | Debug | Debug | Debug |
| 7 | Copyright | Architecture | Copyright | Architecture |
| 8 | Global Ptr | Global Ptr | Global Ptr | (reserved) |
| 9 | TLS | TLS | TLS | TLS |
| 10 | Load Config | Load Config | Load Config | Load Config |
| 11 | Bound Import | Bound Import | Bound Import | Bound Import |
| 12 | IAT | IAT | IAT | IAT |
| 13 | Delay Import | Delay Import | COM | Delay Import |
| 14 | COM Descriptor | COM Descriptor | Delay Import | .NET MetaData |
| 15 | - | - | (reserved) | - |
+------+-------------------+-------------------+-------------------+-------------------+
这些的编号和顺序似乎不匹配。在 PEReader 和 winnt.h 中,条目 14 是 COM 描述符,但在 CFF 资源管理器中,它显示为 .NET 元数据。 COM 和延迟导入条目似乎也发生了切换。
这些工具中有几个会出错,这似乎很奇怪。哪一个是正确的?我是否缺少更新的定义?
最佳答案
您不必使用任何未记录的内容。正确的可以在 Windows SDK 附带的 WinNT.h 文件中找到。 (安装后,在我的机器上位于 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include):
// Directory Entries
#define IMAGE_DIRECTORY_ENTRY_EXPORT 0 // Export Directory
#define IMAGE_DIRECTORY_ENTRY_IMPORT 1 // Import Directory
#define IMAGE_DIRECTORY_ENTRY_RESOURCE 2 // Resource Directory
#define IMAGE_DIRECTORY_ENTRY_EXCEPTION 3 // Exception Directory
#define IMAGE_DIRECTORY_ENTRY_SECURITY 4 // Security Directory
#define IMAGE_DIRECTORY_ENTRY_BASERELOC 5 // Base Relocation Table
#define IMAGE_DIRECTORY_ENTRY_DEBUG 6 // Debug Directory
// IMAGE_DIRECTORY_ENTRY_COPYRIGHT 7 // (X86 usage)
#define IMAGE_DIRECTORY_ENTRY_ARCHITECTURE 7 // Architecture Specific Data
#define IMAGE_DIRECTORY_ENTRY_GLOBALPTR 8 // RVA of GP
#define IMAGE_DIRECTORY_ENTRY_TLS 9 // TLS Directory
#define IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG 10 // Load Configuration Directory
#define IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT 11 // Bound Import Directory in headers
#define IMAGE_DIRECTORY_ENTRY_IAT 12 // Import Address Table
#define IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT 13 // Delay Load Import Descriptors
#define IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR 14 // COM Runtime descriptor
WINE 和 PEReader 的定义只是(我相信是正确的)借用了这个 .h 文件。
关于windows - PE 目录的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8656299/
我需要验证给定的二进制文件是否是 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 字符串),我必须启用用户修改。 我正在寻找的是(希望)一种工具,
我是一名优秀的程序员,十分优秀!