Computer Architecture| 이름 | 용도 |
|---|---|
| rax | 함수의 반환 값 |
| rbx | x64에서는 주용도 없음 |
| rcx | 반복문의 반복 횟수, 각종 연산의 시행 횟수 |
| rdx | x64에서는 주된 용도 없음 |
| rsi | 데이터를 옮길 때 원본을 가리키는 포인터 |
| rdi | 데이터를 옮길 때 목적지를 가리키는 포인터 |
| rsp | 사용중인 스택의 위치를 가리키는 포인터 |
| rbp | 스택의 바닥을 가리키는 포인터 |
cs, ss, ds, es, fs, gs 총 6가지 세그먼트 레지스터가 존재.
CPU가 어느 부분의 코드를 실행할 지 가리키는 역할.
rip : 크기는 8바이트
| 플래그 | 의미 |
|---|---|
CF (Carry Flag) | 부호 없는 수의 연산 결과가 비트의 범위를 넘을 경우 설정된다. |
ZF (Zero Flag) | 연산의 결과가 0일 경우 설정 된다. |
SF (Sign Flag) | 연산의 결과가 음수일 경우 설정 된다. |
OF (Overflow Flag) | 부호 있는 수의 연산 결과가 비트 범위를 넘을 경우 설정 된다. |

Linux Memory Layout
x86 Assemblyopcode operand1 operand2
=operand1에 operand2를 opcode해라
| 명령 코드 | |
|---|---|
| 데이터 이동 | mov. lea |
| 산술 연산 | inc, dec, add, sub |
| 논리 연산 | and, or, xor, not |
| 비교 | cmp, test |
| 분기 | jmp, je, jg |
| 스택 | push, pop |
| 프로시져 | call, ret, leave |
| 시스템 콜 | syscall |
push valval을 스택 최상단에 쌓음결론적으로 rsp-=8을 하고, [rsp]=val인 셈임
pop regreg에 대입결론적으로 rsp+=8을 하고 reg=[rsp-8]인 셈임
프로시저를 부르는 행위를 호출(Call)이라고 부르며, 프로시저에서 돌아오는 것을 반환(Return)이라고 부른다.
call addraddr에 위치한 프로시저 호출push return_address
jmp addr
leavemov rsp, rbp
pop rbp
retreturn address로 반환pop rip