我希望解析一个PE文件并从中读取可选标题,以及一些其他数据,这些数据使我能够知道它是32位PE还是64位。 我知道imagehlp和dbghlp头文件给我的结构如 IMAGE_OPTIONAL_HEADER 。 但我不知道如何解析我的文件来产生这些。我可以使用文档并使用偏移编写我自己的解析器,但是如果有人知道正确的API来解析PE吗?
我的目标: 1)确定文件是x64还是x86可执行文件。可能在标题? 2)检查ASLR,DEP和SAFESEH。我认为前两个将在PE可选标题中。
那么是否有任何API可以解析我的PE并将这些结构返回给我?
答案 0 :(得分:2)
你应该看一下Image Helper Library。有一个方法MapAndLoad
可以指向PE文件的各个部分(LOADED_IMAGE
structure),即 IMAGE_NT_HEADERS , IMAGE_SECTION_HEADER 。 IMAGE_NT_HEADERS
structure包含指向IMAGE_OPTIONAL_HEADER
structure的指针。
字段 DllCharacteristic 包含各种标记,例如 IMAGE_DLLCHARACTERISTICS_NX_COMPAT 或 IMAGE_DLLCHARACTERISTICS_NO_SEH 。
要使用这些API,请使用Imagehlp.h并链接到Imagehlp.lib。
答案 1 :(得分:0)
来自1)确定文件是x64还是x86可执行文件。
IMAGE_FILE_HEADER
的 Machine
字段
2)检查ASLR,DEP和SAFESEH
<强> ASLR 强>:
IMAGE_OPTIONAL_HEADER
DllCharacteristics
IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE
的按位和以上字段:如果不是0,则图像支持ASLR。<强> DEP 强>:
IMAGE_OPTIONAL_HEADER
DllCharacteristics
IMAGE_DLLCHARACTERISTICS_NX_COMPAT
的按位和以上字段:如果不是0,则图像支持ASLR。<强> SAFESEH 强>:
IMAGE_OPTIONAL_HEADER
的DataDirectory
字段(IMAGE_DATA_DIRECTORY
数组)IMAGE_OPTIONAL_HEADER.DataDirectory[IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG].VirtualAddress
IMAGE_LOAD_CONFIG_DIRECTORY
结构。SEHandlerTable
字段不为0,则图像支持SAFESEH。