Как читать / писать машинный код .exe вручную? - PullRequest
12 голосов
/ 16 апреля 2009

Я не очень хорошо знаком с компилятором магии. Для меня превращение читаемого человеком кода (или не действительно читаемых инструкций по сборке) в машинный код - для меня ракетостроение в сочетании с колдовством.

Я ограничусь темой этого вопроса до исполняемых файлов Win32 (.exe). Когда я открываю эти файлы в специализированном средстве просмотра, я могу найти строки (обычно 16 байт на символ), разбросанные по разным местам, но остальное - просто мусор. Я полагаю, что нечитаемая часть (большинство) - это машинный код (или, возможно, ресурсы, такие как изображения и т. Д.).

Есть ли простой способ считывания машинного кода? Открывая исполняемый файл как поток файлов и читая его побайтно, как можно превратить эти отдельные байты в сборку? Есть ли прямое отображение между этими байтами инструкции и инструкцией по сборке?

Как пишется .exe? Четыре байта на инструкцию? Больше? Меньше? Я заметил, что некоторые приложения могут создавать исполняемые файлы просто так: например, в ACD See вы можете экспортировать серию изображений в слайд-шоу. Но это не обязательно должен быть слайд-шоу SWF, ACD See также способен создавать EXEcutable презентации. Как это сделать?

Как понять, что происходит внутри EXE-файла?

Ответы [ 13 ]

1 голос
/ 16 апреля 2009

Относительно этого вопроса, кто-нибудь все еще читает такие вещи, как CD 21?

Я вспомнил Сандру Баллок в одном шоу, которая на самом деле читала скриншот из шестнадцатеричных чисел и выяснила, что делает программа. Вроде как текущая версия чтения кода Matrix.

если вы читаете такие вещи, как CD 21, как вы помните различные комбинации?

1 голос
/ 16 апреля 2009

Win32 exe формат на MSDN

Я бы посоветовал взять немного исходного кода Windows C, собрать и начать его отладку в Visual Studio. Переключитесь на вид разборки и перешагните через команды. Вы можете увидеть, как код C был скомпилирован в машинный код - и посмотреть, как он выполняется шаг за шагом.

0 голосов
/ 19 января 2019

Каждая инструкция в машинном коде хранится в специальной области памяти внутри процессора. Ранние книги INTEL дали машинный код для своих инструкций, поэтому нужно попытаться получить такие книги, чтобы понять это. Очевидно, что сегодня машинный код не легко доступен. Что было бы хорошо, так это программа, которая может преобразовать шестнадцатеричный код в машинный код. Или сделайте это вручную _ !! утомительно

...