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