A
Size: a a a
A
DR
format PE CONSOLE ; PE = Windows, Console = запуск оболочки conhost
entry start ; Начинаться всё будет с метки start в секции с флагами executable
section '.text' code readable executable ; Секция с кодом, флаги: чтение, запуск
; Сама метка EP (Entry Point - начальная точка)
start:
; Конец
ret
; Выход из функции
(метки)
АМ
EK
DR
format PE CONSOLE ; PE = Windows, Console = запуск оболочки conhost
entry start ; Начинаться всё будет с метки start в секции с флагами executable
section '.text' code readable executable ; Секция с кодом, флаги: чтение, запуск
; Сама метка EP (Entry Point - начальная точка)
start:
; Конец
ret
; Выход из функции
(метки)
Пример HW (Hello World):
format PE CONSOLE
entry start
include 'win32a.inc' ; Определённые дефайны. Можно и без них, но будет значительно больше кода
; Секция data - переменные
section '.data' data readable writeable
; Определяем массив байтов (символы)
str db 'test', 0
; Формат строки для printf
str_f db '%s', 0
section '.text' code readable executable
start:
; stdcall - справа на лево (printf("%s", "text") = printf("text", "%s"))
; Заносим параметры в стэк. Оттуда функция будет брать аргументы, переданные из параметров через смещения
push str
push str_f
call [printf] ; Обращаемся по адресу и передаём управление функции. call сохраняет адрес, с которого было передано управление, и после ret - процессор передаст управление обратно
; Читаем символ. Нужно для того, что бы программа не закрылась. Аргументов у функции нет, по этому в стэк ничего не кладём
call [getch]
ret
; Секция импорта. Тут определены адреса функций, которые будут использованы
; Флаги: чтение, запись
section '.idata' import readable writeable
library kernel, 'kernel32.dll',\
msvcrt, 'msvcrt.dll' ; Получаем start address к библиотеке kernel32.dll и msvcrt.dll (С-libraries, можно и через WInApi)
import kernel,\
ExitProcess, 'ExitProces' ; Ищем внутри kernel32.dll = ExitProcess, функция, для закрытия процесса
import msvcrt,\
printf, 'printf',\
getch, '_getch' ; Ищем в msvcrt функцию printf и _getch (чтение символа) от Си
Объяснил как смог. Тут нужно ещё знать функции WinApi и Си. Быть хотя бы знакомым с каким-то высокоуровневым языком программирования (С++ или Си)A
EK
r
DR
DR
DR
A
EK
A
A
DR
DR
A
DR