главная программы pe explorer обзорный тур
Коррекция ошибок в файле
Проверка целостности структуры PE файла. Открытие файла в Safe Mode.
При открытии файла PE Explorer автоматически выполняет две операции: проверку файла на наличие ошибок и обработку файла при помощи подсистемы плагинов.
Скачать 30-дневную пробную версию PE Explorer Купить лицензию
Если при открытии файла обнаруживается ошибка во внутренней структуре, то PE Explorer открывает такой файл в Safe mode. При этом те участки данных, которые вызвали ошибку, исключаются и становятся недоступными для редактирования. Такой подход во многих случаях позволяет продолжить работу с повреждёнными файлами (например, после распаковки) и извлечь из них информацию.
Например, если в файле за секцией ресурсов обнаруживается секция импорта, то такой файл обычно невозможно открыть во многих PE редакторах. PE Explorer же такой файл открывает, при этом в верхнем правом углу появляется сообщение:
Различия в обработке ошибки при обнаружении расхождения в размере имиджа файла под Windows 9x/ME и NT/2000/XP/Vista
При открытии файла PE Explorer вначале проводит проверку целостности файла путём анализа и сравнения различных значений из заголовка и внутренних структур файла. Все упомянутые ниже значения отображаются в панели Headers Info Viewer.
На основе физических размеров секций, составляющих файл, производится подсчёт значения размера образа файла SizeOfImage. Здесь важно, чтобы физический размер файла был равен сумме значений SizeOfImage и SizeOfHeaders.
Значение SizeOfHeaders включает в себя DOS Stub и выравнивается на ближайшее значение FileAlignment. В исполняемом файле физический размер секции всегда должен быть выравнен на границу, определяемую значением FileAlignment.
Другие значения в заголовке расчитываются по разному, в зависимости от используемой версии Windows (9x/ME или NT/XP и выше). В частности, значения SizeOfRawData и PointerToRawData, которые отображаются в панели Section Headers.
При загрузке PE файла операционная система подсчитывает необходимое количество памяти для размещения файла, считывая значения SizeOfRawData из заголовка каждой секции в файле. При этом разные версии Windows этот подсчёт ведут не одинаково.
Начиная с Windows NT (включая 2000 и XP), значение HeaderSize добавляется к сумме значений SizeOfRawData из каждой секции, полученное значение сравнивается с величиной SizeOfImage, указанной в заголовке файла. Если вычисленное значение превышает значение SizeOfImage, это несоответствие регистрируется как неисправимая фатальная ошибка, загрузка файла блокируется, а пользователю показывается сообщение "This file is not a valid Win32 application" ("Это приложение не является допустимым Win32 приложением").
Семейство Windows 9x/ME осуществляет гораздо менее жёсткую проверку заголовка, проверяя лишь его валидность перед передачей управления запущенному приложению. И если во время исполнения файла будет сделана попытка обратиться к участку памяти, который, судя по значению SizeOfRawData находится внутри границы SizeOfImage, а на самом деле расположен за этой границей, то операционная система закроет программу и покажет пользователю знаменитое "This program has performed an illegal operation and will be shutdown" ("Программа выполнила недопустимую операцию и будет закрыта").
Разумеется, погрешность физического размера не всегда является фатальной ошибкой. Скажем, физический размер секции мог быть уменьшен за счёт выравнивания секции. Однако нет никакой гарантии, что приложение никогда не попробует обратится к адресам в памяти за пределами указанной границы. Поэтому разработчики архитектуры NT предпочли запретить исполнение файлов с подобными отклонениями.
Когда PE Explorer обнаружит подобное отклонение в файле во время проверки его целостности, вы увидите примерно такое сообщение:
Диалог предлагает пользователю увеличить размер последней секции файла, чтобы компенсировать расхождение между значением SizeOfImage, указанным в заголовке, и действительным физическим размером файла. Эта поправка так же потребуется для проведения других операций с файлом.
При появлении этого далога настоятельно рекомендуется ответить [Yes]. Это убережёт вас от многих потенциальных проблем, особенно если вы не являетесь экспертом в области взаимодействий структур в PE файле.
При сохранении файла PE Explorer попытается автоматически скорректировать расхождения подобного рода путём пересчёта соответствующих значений в заголовке файла. В большинстве случаев дальнейшие манипуляции с этими значениями не потребуются.
Смотрите также: Редактор секций, восстановление характеристик секций
Скачать 30-дневную пробную версию PE Explorer Купить лицензию