我正在尝试使用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 和指针指向/包含垃圾时,如何处理上述情况 .