어셈블리어와 x86-64 본문
명령 코드
데이터 이동(Data Transfer) | mov, lea |
산술 연산(Arithmetic) | inc, dec, add, sub |
논리 연산(Logical) | add, or, xor, not |
비교(Comparison) | cmp, test |
분기(Branch) | jmp, je, jg |
스택(Stack) | push, pop |
프로시져(Procedure) | call, ret, leave |
시스템 콜(System call) | syscall |
메모리 피연산자
QWORD PTR [0x8048000] | 0x8048000의 데이터를 8바이트만큼 참조 |
DWORD PTR [0x8048000] | 0x8048000의 데이터를 4바이트만큼 참조 |
WORD PTR [rax] | rax가 가르키는 주소에서 데이터를 2바이트 만큼 참조 |
syscall
요청: rax 인자 순서: rdi → rsi → rdx → rcx → r8 → r9 → stack |
syscallraxarg0 (rdi)arg1 (rsi)arg2 (rdx)
read | 0x00 | unsigned int fd | char *buf | size_t count |
write | 0x01 | unsigned int fd | const char *buf | size_t count |
open | 0x02 | const char *filename | int flags | umode_t mode |
close | 0x03 | unsigned int fd | ||
mprotect | 0x0a | unsigned long start | size_t len | unsigned long prot |
connect | 0x2a | int sockfd | struct sockaddr * addr | int addrlen |
execve | 0x3b | const char *filename | const char *const *argv | const char *const *envp |
스택
push val : rsp를 8만큼 빼고, 스택의 최상단에 val을 쌓습니다.
pop reg: 스택 최상단의 값을 reg에 넣고, rsp를 8만큼 더합니다.
프로시저
call addr: addr의 프로시저를 호출합니다.
leave: 스택 프레임을 정리합니다.
ret: 호출자의 실행 흐름으로 돌아갑니다.
시스템 콜:
syscall: 커널에게 필요한 동작을 요청합니다.
'개념 정리' 카테고리의 다른 글
ptmalloc2 (0) | 2022.01.03 |
---|---|
셸코드 작성 (0) | 2021.12.30 |
Linux Memory Layout (0) | 2021.12.26 |
메모리 구조 (0) | 2021.11.25 |
리눅스 메모리 보호 기법 간단 정리 (0) | 2021.10.10 |
Comments