Skip to main content

Структура программы

Интересный учебник

Структура программы

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
  • .bss
  • .txt
  • .data Объявляются данные в формате <varname> <type> <value>

     

    Константы: <constant_name> equ <value>

     
    .bssРаздел для неинициализированных переменных. <varname> <type> <number> Число обозначает количество этих элементов.  Резервируется во время исполнения.
    dArray resd 20 ;20 двойных слов

     

    .txtПрограмма. 

    .data

    Выделяется память. db - байт, dw - слово, dd - двойное слово, dq - двойное длинное слово. Для строк в конце добавляется завершающий 0 (NULL). 

    .bss

    resb - байт, resw - слово, resd - двойное слово, resq - двойное длинное слово

    .txt Программа. 

    Регистры

    rip - счетчик команд

    rflags - флаги, статус выполнения предыдущей команды

     

    Syscall

    Инструкция процессора, мост между ядром и непривилегированными программами. Для его использования необходимо правильно заполнить регистры в соответствии с соглашениями ABI (Application Binary Interface). Есть обновляемая таблица системных вызовов Номер функции размещается в регистре rax, Аргументы функции последовательно в регистрах rdi, rsi, rdx, r10, r8, r9. Например для вызова функции