WSL2에서 nasm을 활용하여 assembly를 써본 것을 기록하고자 한다.
section .data
msg db "Hello World", 10
section .text
global _start
_start:
mov rax,1 ;For write syscall
mov rdi,1 ;fd
mov rsi,msg ;buf
mov rdx,12 ;size
syscall ;write(1, msg, 12)
mov rax,60 ;For exit syscall
mov rdx,0 ;0
syscall ;exit(0)
man 2 write 이런식으로 함수 사용법 알 수 있음
8개의 범용 레지스터
AX (Accumulator register). 산술 연산에 사용.
CX (Counter register). 시프트/회전 연산과 루프에서 사용.
DX (Data register). 산술 연산과 I/O 명령에서 사용.
BX (Base register). 데이터의 주소를 가리키는 포인터로 사용. (세그멘티드 모드에서는 세그멘트 레지스터 DS로 존재)
SP (Stack Pointer register). 스택의 최상단을 가리키는 포인터로 사용.
BP (Stack Base Pointer register). 스택의 베이스를 가리키는 포인터로 사용.
SI (Source Index register). 스트림 명령에서 소스를 가리키는 포인터로 사용.
DI (Destination Index register). 스트림 명령에서 도착점을 가리키는 포인터로 사용.
시스템 호출의 유형
프로세스 제어(process Control)
파일 조작(file manipulation)
장치 관리(Device Management)
정보 유지(Information maintenance)
통신(Communication)
시스템 호출의 세 가지 기능
사용자 모드에 있는 응용 프로그램이 커널의 기능을 사용할 수 있도록 한다.
시스템 호출을 하면 사용자 모드에서 커널 모드로 바뀐다.
커널에서 시스템 호출을 처리하면 커널 모드에서 사용자 모드로 돌아가 작업을 계속한다.
ELF 파일형식(a.out assembler output)