Подтвердить что ты не робот

Как создать исполняемый файл .exe PE вручную?

Все тексты о том, как создать компилятор, останавливаются после объяснения лексеров и парсеров. Они не объясняют, как создать машинный код. Я хочу понять сквозной процесс.

В настоящее время я понимаю, что форматы файлов exe для Windows называются Portable Executable. Я читал о его заголовках, и я еще не нашел ресурс, который объясняет это легко.

Моя следующая проблема: я не вижу никакого ресурса, который объясняет, как машинный код хранится в файле. Это как 32-разрядные инструкции с фиксированной длиной, хранящиеся один за другим в разделе .text?

Есть ли место, которое по крайней мере объясняет, как создать exe файл, который ничего не делает (у него есть инструкция No Op). Следующим моим шагом будет привязка к файлам DLL для печати на консоль.

4b9b3361

Ответ 1

Хороший вопрос! У меня нет большого опыта в этом конкретном вопросе, но вот как я начну:

PS: Это в основном решения Unix, но я уверен, что PE должен делать что-то принципиально подобное.

Я думаю, что лучший способ приблизиться к ней - это сначала попытаться проанализировать, как работают существующие PE/ELF, в основном обратная инженерия. И для этого машина Unix будет хорошим началом. И тогда сделайте свою магию:)

Не тот же, но похожий вопрос здесь.

Update:

Я сгенерировал дамп объекта из примера c-кода. Теперь, я предполагаю, что вы нацелились правильно? Вы должны знать, генерируете ли вы этот файл (a.out)?

https://gist.github.com/1329947

Взгляните на это изображение, время жизни c-кода.

enter image description here

Источник Теперь, чтобы быть понятным, вы хотите реализовать последний шаг, то есть преобразование объектного кода в исполняемый код?

Ответ 3

Для Linux можно прочитать и запустить примеры из "Программирование с нуля" Джонатана Бартлетта:

http://www.cs.princeton.edu/courses/archive/spr08/cos217/reading/ProgrammingGroundUp-1-0-lettersize.pdf

Тогда, конечно, можно предпочесть взломать программы Windows. Но, возможно, бывший дает лучший способ понять, что на самом деле происходит.

Ответ 4

Неудивительно, что лучшие сайты для получения информации о написании файлов формата PE - это создание вирусов.

Поиск VX Heavens для "PE" дает целую кучу учебников для изменения файлов PE

Ответ 5

Iv'e использовал "Wotsit File Format" в течение многих лет... вплоть до дней MS-Dos:-) и обратно, когда это был просто набор текстовых файлов, которые вы могли загрузить из большинства систем BBS именуемая "Энциклопедия типа файлов программистов"

Теперь он принадлежит людям, которые управляют Gamedev.Net, и, вероятно, один из лучших секретов в Интернете.

Вы найдете формат EXE на этой странице: http://www.wotsit.org/list.asp?fc=5

Enjoy.

Ответ 6

Некоторая информация о том, как сделать файлы PE максимально возможными: Tiny PE.

Минималистский способ возиться с генерацией кода, если вы просто хотите попробовать несколько простых вещей, - вывести MS-DOS.COM файлы, которые не имеют заголовка или метаданных. К сожалению, вам будет ограничен 16-битный код. Этот формат по-прежнему несколько популярен для demos.

Что касается формата инструкции, из того, что я помню, набор команд x86 имеет длину переменной, включая 1-байтные инструкции. Процессоры RISC, вероятно, будут иметь инструкции с фиксированной длиной.