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

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

Спасибо.

Ответ 1

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

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

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

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

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

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

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

Ответ 2

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

mov ax, 2h

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

B8 02 00

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

Ответ 3

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

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

Ответ 4

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

msgbox("Your message goes here")

или

alert("Your message goes here")