Структура программы
Структура программы
section .data
msg db "hello, world", 0
section .bss
section .text
global main
main:
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, 12
syscall
mov rax, 60
mov rdi, 0
syscall
| .data |
Объявляются данные в формате <varname> <type> <value> Константы: <constant_name> equ <value> |
| .bss | Раздел для неинициализированных переменных. <varname> <type> <number> Число обозначает количество этих элементов. Резервируется во время исполнения.
|
| .txt | Программа. |
.data
Выделяется память. db - байт, dw - слово, dd - двойное слово, dq - двойное длинное слово. Для строк в конце добавляется завершающий 0 (NULL).
.bss
resb - байт, resw - слово, resd - двойное слово, resq - двойное длинное слово
Регистры
rip - счетчик команд
rflags - флаги, статус выполнения предыдущей команды
Syscall
Инструкция процессора, мост между ядром и непривилегированными программами. Для его использования необходимо правильно заполнить регистры в соответствии с соглашениями ABI (Application Binary Interface). Есть обновляемая таблица системных вызовов Номер функции размещается в регистре rax, Аргументы функции последовательно в регистрах rdi, rsi, rdx, r10, r8, r9. Например для вызова функции