我希望解析一个PE文件并从它读取可选的头部,以及其他一些数据,这些数据使我能够知道它是32位的PE还是64位的。我知道imagehlp和dbghlp头文件为我提供了像IMAGE_OPTIONAL_HEADER.这样的结构。但我不知道如何解析我的文件来生成这些文件。我可以使用文档并使用偏移量编写自己的解析器,但是如果有人知道正确的API来解析PE呢?
我的目标: 1)确定该文件是x64还是x86可执行文件。可能在报头??2)检查ASLR,DEP和SAFESEH。前两个我认为将在PE可选的标题。
那么,是否有任何API来解析我的PE并返回这些结构?
发布于 2015-04-23 07:43:34
您应该看看图像帮助程序库。有一个方法MapAndLoad将给您一个指向PE文件( structure)各个部分的指针,即 structure structure包含指向 structure的指针。
字段DllCharacteristic包含各种标志,例如IMAGE_DLLCHARACTERISTICS_NX_COMPAT或IMAGE_DLLCHARACTERISTICS_NO_SEH。
要使用这些API,需要包含Imagehlp.h和指向Imagehlp.lib的链接。
发布于 2015-04-23 08:10:53
1)确定该文件是x64文件还是x86可执行文件。
Machine字段来自IMAGE_FILE_HEADER
2)检查ASLR、DEP和SAFESEH
ASLR
DllCharacteristics检查IMAGE_OPTIONAL_HEADERIMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE:如果不是0,那么图像支持ASLR。DEP
DllCharacteristics检查IMAGE_OPTIONAL_HEADERIMAGE_DLLCHARACTERISTICS_NX_COMPAT:如果不是0,那么图像支持ASLR。SAFESEH
DataDirectory字段of IMAGE_OPTIONAL_HEADER (IMAGE_DATA_DIRECTORY数组)IMAGE_OPTIONAL_HEADER.DataDirectory[IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG].VirtualAddress获取RVAIMAGE_LOAD_CONFIG_DIRECTORY结构。SEHandlerTable字段不是0,则图像支持SAFESEH。https://stackoverflow.com/questions/29816732
复制相似问题