Как исполняемые файлы работают на уровне бит / байт? - PullRequest
3 голосов
/ 01 апреля 2012

У меня есть компьютер с Windows 7. Я слышал, что исполняемые файлы Window используют формат PE. Я пытался понять, как собираются исполняемые файлы, поэтому я открыл один в шестнадцатеричном редакторе. Они начинаются с заголовка «MZ», чтобы компьютер знал, что это файл .exe. Большая часть этого не английская. Я также заметил, что в моем конкретном файле было 3 «блока» из 96 пустых символов. Двое из них были близки к началу, а один был в конце. Вот как это выглядит:

BrokenLink

В этом коде используется ассемблер FASM.

Это код перед компиляцией:

BrokenLink

Так что мой вопрос в том, как исполняемые файлы "соединены". Что случилось с бесконечными символами NULL. Кроме того, почему, когда вы редактируете шестнадцатеричный код файла и ДОБАВЛЯЕТЕ байт, данные «повреждены», но как получается, когда вы просто ИЗМЕНЯЕТЕ байт, это нормально.

Спасибо, спасибо!

Christian

1 Ответ

2 голосов
/ 01 апреля 2012

Формат, используемый Windows, - это формат Microsoft Portable Executable.Чтобы узнать больше, вы можете прочитать спецификацию файла.

Итак, мой вопрос, как исполняемые файлы "соединяются".Что случилось с бесконечными символами NULL.Кроме того, почему, когда вы редактируете шестнадцатеричный код файла и ДОБАВЛЯЕТЕ байт, данные «повреждены», но когда вы просто ИЗМЕНИТЕ байт, это нормально.

Переносимые исполняемые файлы следуютопределенный стандарт.Вы не можете просто изменить байты, потому что вы заставите файл нарушать стандарт.

Следовательно, добавление байтов в произвольных местах может повредить формат.Например, PE файлы состоят из разделов.Эти разделы имеют определенный размер, который определяется в заголовках разделов.Сам заголовок раздела имеет определенный размер с конкретными полями с определенными смещениями.Предположим, что вы просто добавляете байт к разделу или заголовку раздела, вы, вероятно, повреждаете файл, перемещая поля в смещения, которых они не ожидают, или создавая таким образом, чтобы раздел не соответствовал размеру, в котором он был первоначально определен.

Изменение байта где-то изменит значение.Даже тогда вы можете все испортить.Если вы имеете в виду конкретную цель, вам следует указать ее, и мы, возможно, сможем указать вам лучшее направление для ее достижения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...