В настоящее время я работаю над тем, что требует от меня удалить раздел из исполняемого файла в формате PE. Сначала я только что удалил IMAGE_SECTION_HEADER, изменил поле NumberOfSections в IMAGE_FILE_HEADER, пересчитал SizeOfImage/SizeOfHeaders в IMAGE_OPTIONAL_HEADER и переместил необработанный адрес следующих разделов по необработанному размеру удаленной секции. Однако Windows отказалась загрузить файл с сообщением об ошибке «XXX не является допустимым приложением Win32». Некоторое время я боролся, но пытался также перемещать виртуальный адрес следующих разделов по виртуальному размеру удаленных разделов, и все работает нормально.Почему виртуальные адреса раздела должны быть непрерывными?
В чем причина того, что виртуальные адреса должны быть непрерывными и не может быть пробелов? Я попытался прочитать официальную документацию PE, но безуспешно. Я всегда думал, что не имеет значения, какие адреса имеют отдельные разделы, если значение имеет значение ValueOfImage.
Вы пытались сравнить результаты 'dumpbin' от трех файлов? – Luaan
И я только что протестировал - у вас могут быть промежутки между разделами RVAs. На самом деле они могут даже перекрываться. Однако они всегда должны быть в порядке RVA, но не должны быть проблемой, если вы просто * удаляете разделы. – Luaan
Могу ли я спросить вас, как вы протестировали это? Я пытался воспроизвести описанное вами поведение, но безуспешно. –