본문 바로가기

어셈블리어와 x86-64 본문

개념 정리

어셈블리어와 x86-64

Seongjun_You 2021. 12. 26. 18:30

명령 코드

데이터 이동(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