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