Как именно работают исполняемые файлы?

Я знаю, что исполняемые файлы содержат инструкции, но что именно это за инструкции? Если я хочу позвонить MessageBox функция API например, как выглядит инструкция?

спасибо.

4 ответов


исполняемые файлы являются двоичными файлами, которые понимаются операционной системой. Исполняемый файл будет содержать разделы, в которых содержатся данные. Windows использует формат PE. Формат PE имеет раздел, который имеет машина инструкция. Эти инструкции-просто числа, которые упорядочены в последовательности и понятны процессору.

вызов функции MessageBox (), будет последовательность инструкций, которая будет

1) есть адрес функции, которая находится в DLL. Этот адрес вводится компилятором

2) инструкции "нажать" параметры в стек

3) фактический вызов функции

4) какая-то очистка (зависит от соглашения о вызове).

важно помнить, что EXE-файлы - это только специально отформатированные файлы. У меня нет разборки для вас, но вы можете попробовать скомпилировать свой код, а затем открыть EXE в visual studio, чтобы увидеть разборка.


это раздутый вопрос, если я когда-либо видел. Но, я постараюсь сделать все возможное, чтобы дать обзор. В двоичные исполняемые есть такие вещи, называемые "байт-коды", байт-коды-это только наговор represtation инструкции. Обычно вы можете "искать" байтовые коды и преобразовывать их в инструкции по сборке. Например: Инструкция:

mov ax, 2h

имеет представление байт-кода:

B8 02 00

байтовые коды загружаются в ОЗУ и выполняются обработчиком как это его "язык". Никто в здравом уме, что я знаю программы в байтовом коде, это было бы просто сложно. Сборка...и так достаточно весело. Всякий раз, когда вы компилируете программу на языке более высокого уровня, она должна взять ваш код и превратить его в инструкции по сборке, вы просто представляете, как искаженный код будет выглядеть после его компиляции. Не поймите меня неправильно, компиляторы отличные, но разберите программу на C++ с IDA Pro Freeware, и вы увидите, о чем я говорю. Это исполняемые файлы в в двух словах, есть, конечно, книги, написанные на эту тему. Я не эксперт по API Windows, но кто-то другой может показать вам, как будет выглядеть инструкция для вызова API Windows "MessageBox". Это должно быть только несколько линий сборки.


любой код, написанный (будь то на C или каком-либо другом языке), компилируется компилятором на специальный язык, называемый assembly (ну, машинный код, но они очень близки). Сборка-это очень низкоуровневый язык, который процессор выполняет изначально. Обычно вы не программируете в сборке, потому что она настолько низкоуровневая (например, вы не хотите иметь дело с вытягиванием битов из памяти).

Я не могу сказать о MessageBox функция конкретно, но я бы предположил что это много инструкций. Подумайте об этом: он должен нарисовать окно и стиль его, однако ваш компьютер стилизует его, и подключить четный обработчик, чтобы что-то произошло, когда пользователь нажимает кнопку, сообщает Windows (или любой операционной системе), чтобы добавить его на панель задач (или док-станцию и т. д.), И так много других вещей.


это зависит от языка, на котором вы работаете. Но для многих это так же просто, как...

msgbox("Your message goes here")

или

alert("Your message goes here")