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