728x90
General Purpose Register
rax (accumulator register) | 함수의 반환 값 |
rbx (base register) | x64에서는 주된 용도 없음 |
rcx (counter register) | 반복문의 반복 횟수, 각종 연산의 시행 횟수 |
rdx (data register) | x64에서는 주된 용도 없음 |
rsi (source index) | 데이터 원본 포인터 |
rdi (destination index) | 데이터 목적지 포인터 |
rsp (stack pointer) | 스택 포인터 |
rbp (stack base pointer) | 스택 바닥 포인터 |
rip : Instruction Pointer
Flag Register
CF(Carry Flag) |
ZF(Zero Flag) |
SF(Sign Flag) |
OF(Overflow Flag) |
x86-64 레지스터 호환
R*X | 64비트 |
E*X | 하위 32비트 |
*X | 하위 16비트 |
*H | 상위 8비트(*X 기준) |
*L | 하위 8비트 |
Assembly
데이터 이동(Data Transfer) | mov, lea |
산술 연산(Arithmetic) | inc, dec, add, sub |
논리 연산(Logical) | and, or, xor, not |
비교(Comparison) | cmp, test |
분기(Branch) | jmp, je, jg |
스택(Stack) | push, pop |
프로시져(Procedure) | call, ret, leave |
시스템 콜(System call) | syscall |
syscall
요청: rax 인자 순서: rdi → rsi → rdx → rcx → r8 → r9 → stack |
x64 syscall table
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 |
https://dreamhack.io/lecture/roadmaps/all/reverse-engineering
'CS > Etc.' 카테고리의 다른 글
note (0) | 2023.09.25 |
---|---|
[Dreamhack] Quiz: x86 Assembly 2 (0) | 2023.09.22 |