2009-10-24 5 views

ответ

10

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

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

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

2) инструкция «толчок» параметры в стек

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

4) какое-то очистки (в зависимости от вызывающей конвенции).

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

+0

Спасибо за ответ, но Wikipedia говорит, что DLL-файл также использует формат PE. Почему это? –

+0

И как именно он «толкает» эти параметры? Я знаю из PE Explorer, что DLL сохраняет функцию и размер ее параметров, например, 8 байтов могут быть int, int. –

+2

DLL может также содержать исполняемый код, который EXE может использовать во время выполнения - отсюда и название «динамическая библиотека ссылок». –

-4

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

msgbox("Your message goes here") 

или

alert("Your message goes here") 
+3

Я действительно не думал, что вы понимаете мой вопрос, я имел в виду после компиляции, как выглядят эти инструкции? –

2

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

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

4

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

mov ax, 2h 

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

B8 02 00 

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