Как я могу создать исполняемый файл .exe PE вручную? - PullRequest
20 голосов
/ 31 октября 2011

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

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

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

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

Ответы [ 6 ]

9 голосов
/ 01 ноября 2011

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

  1. PE или ELF не создают чистый машинный код.Он также содержит некоторую информацию заголовка и т. Д. Подробнее: Запись пользовательских данных в исполняемые файлы в Windows и Linux

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

  3. Теперь, если выхотите знать, как в первую очередь генерируется контентная часть, т.е. как генерируется машинный код, тогда это задача генерации кода компилятора .

  4. Попробуйте некоторый редактор ресурсов, например ResourceEditor , чтобы понять исполняемый файл, или просто ildasm .

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

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

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

Обновление:

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

https://gist.github.com/1329947

Посмотрите на это изображение, время жизни кода AC.

enter image description here

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

3 голосов
/ 29 мая 2015

Как и во многих его статьях, я бы сказал, Статья Мэтта Пьетрека о внутренних органах PE остается лучшим введением в этот вопрос более десяти лет после написания.

2 голосов
/ 31 октября 2011

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

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

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

1 голос
/ 01 ноября 2011

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

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

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

1 голос
/ 31 октября 2011

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

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

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

Наслаждайтесь.

1 голос
/ 31 октября 2011

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

Поиск VX Heavens для "PE" дает целую кучу руководств по модификацииPE файлы

...