Я пытаюсь выполнить определенные вычисления, используя ресурсы в файле PE.Для этого я выполняю следующие действия:
Получить RVA раздела ресурсов из заголовка
PEHeader.DataDirectory [IMAGE_DIRECTORY_ENTRY_RESOURCE] .VirtualAddress
Преобразование вышеуказанного RVA в смещение файла
Достигните начала раздела ресурсов и просмотрите дерево ресурсов
Достигнитеуходит (фактические ресурсы) и выполняет вычисления.
Вышеуказанные шаги работают очень хорошо, когда я имею дело с правильными PE-файлами с допустимыми разделами ресурса, но я не могу обработать следующие случаи:
- RVA раздела ресурсов присутствует в DataDirectory, но фактический раздел ".rsrc" отсутствует
- Раздел ".rsrc" присутствует, но без заголовка раздела
- Раздел «.rsrc» присутствует, но его заголовок содержит значения мусора в поле PointerToRawData или SizeOfRawData.
- Я сталкиваюсь со значением мусора в таких полях, как OffsetToData / OffsetToDirectory на полпути при обходе дерева ресурсов
При столкновении с вышеуказанными ситуациями мой код падает с ACCESS_VIOLATION_EXCEPTIONS или выдает противоречивые результаты.
Мой вопрос заключается в том, что, помимо проверки указателей / значений NULL, как мне обрабатывать описанные выше случаи, когда заголовки и указатели разделов ресурсов указывают на / содержат что-то ненужное.