我正在尝试使用PE文件中的资源执行某些计算 . 为此,我按照以下步骤操作:
- 从 Headers 中获取资源部分的RVA
PEHeader.DataDirectory [IMAGE_DIRECTORY_ENTRY_RESOURCE] .VirtualAddress
-
将上述RVA转换为文件偏移量
-
到达资源部分的开头并遍历资源树
-
到达树叶(实际资源)并进行计算 .
当我处理具有有效资源部分的正确PE文件时,上述步骤工作正常,但我无法处理以下情况:
-
资源部分的RVA存在于DataDirectory中,但缺少实际的".rsrc"部分
-
".rsrc"部分存在但没有部分 Headers
-
".rsrc"部分存在,但它的 Headers 在PointerToRawData或SizeOfRawData字段中都有垃圾值 .
-
在遍历资源树的过程中,我在OffsetToData / OffsetToDirectory等字段中遇到垃圾值
遇到上述情况时,我的代码与ACCESS_VIOLATION_EXCEPTIONS崩溃或产生不一致的结果 .
我的问题是,除了检查NULL指针/值之外,当资源节 Headers 和指针指向/包含垃圾时,如何处理上述情况 .