Я знаю, что исполняемые файлы содержат инструкции, но какие именно эти инструкции? Если я хочу вызвать функцию API MessageBox
, например, как выглядит инструкция?Как работают исполняемые файлы?
Спасибо.
Я знаю, что исполняемые файлы содержат инструкции, но какие именно эти инструкции? Если я хочу вызвать функцию API MessageBox
, например, как выглядит инструкция?Как работают исполняемые файлы?
Спасибо.
Executables бинарные файлы, которые, понятном операционная система. Исполняемый файл будет содержать разделы, в которых есть данные. Windows использует PE format. Формат PE имеет раздел, который содержит инструкции machine. Эти инструкции - это просто цифры, которые упорядочены в последовательности и понимаются процессором.
Функция вызов MessageBox(), будет представлять собой последовательность инструкций, которые будут
1) имеют адрес функции, которая находится в DLL. Этот адрес помещаются в компиляторе
2) инструкция «толчок» параметры в стек
3) Фактический вызов функции
4) какое-то очистки (в зависимости от вызывающей конвенции).
Важно помнить, что файлы EXE являются только форматированными файлами. У меня нет разборки для вас, но вы можете попробовать скомпилировать свой код, а затем открыть EXE в визуальной студии, чтобы увидеть разборку.
Это зависит от языка, в котором вы работаете. Но для многих это так просто, как ...
msgbox("Your message goes here")
или
alert("Your message goes here")
Я действительно не думал, что вы понимаете мой вопрос, я имел в виду после компиляции, как выглядят эти инструкции? –
Независимо от того, какой код написан (будь то на С или на каком-либо другом языке), компилятор компилируется на специальный вид языка, называемый сборкой (ну, машинный код, но они очень близки). Сборка - очень низкоуровневый язык, который процессор выполняет изначально. Как правило, вы не программируете в сборке, потому что она настолько низкоуровневая (например, вы не хотите иметь дело с вытаскиванием бит взад и вперед из памяти).
Я не могу сказать о функции MessageBox
, но я бы предположил, что это LOT инструкций. Подумайте об этом: он должен нарисовать окно и стилизовать его, но ваш компьютер стилирует его, и подключите четный обработчик, чтобы что-то произошло, когда пользователь нажимает кнопку, сообщает Windows (или любой другой операционной системе), чтобы добавить его в панель задач (или док-станция и т. д.) и многое другое.
Это раздутый вопрос, если я когда-либо видел его. НО, я постараюсь изо всех сил дать обзор. В двоичном исполняемом файле есть такие вещи, которые называются «байтовыми кодами», байт-коды - это всего лишь шестнадцатеричная пересказка инструкции. Обычно вы можете «искать» байтовые коды и преобразовывать их в инструкции Ассамблеи. Например: Инструкция:
mov ax, 2h
Имеет представление байт-код:
B8 02 00
Коды байта загружаются в оперативную память и выполняемую processer, как это его «язык».Никто не знает, что я знаю программы в байтовом коде, это просто было бы просто сложно. Сборка ... достаточно веселая, как есть. Всякий раз, когда вы компилируете программу на языке более высокого уровня, она должна взять ваш код и включить его в инструкции Ассамблеи, вы просто представляете, как исказится ваш код, если он скомпилирует его. Не поймите меня неправильно, компиляторы великолепны, но разберите программу на C++ с помощью программы IDA Pro, и вы увидите, о чем я говорю. Это исполняемые файлы в двух словах, конечно, книги, написанные на эту тему. Я не эксперт по Windows API, но кто-то еще может показать вам, как будет выглядеть инструкция для вызова Windows API «MessageBox». Это должно быть только несколько строк Ассамблеи.
Спасибо за ответ, но Wikipedia говорит, что DLL-файл также использует формат PE. Почему это? –
И как именно он «толкает» эти параметры? Я знаю из PE Explorer, что DLL сохраняет функцию и размер ее параметров, например, 8 байтов могут быть int, int. –
DLL может также содержать исполняемый код, который EXE может использовать во время выполнения - отсюда и название «динамическая библиотека ссылок». –