ํด์ปค์ ์ธ์ด: ์ด์ ๋ธ๋ฆฌ๐ฌ
PC์์ ๋ณต์กํ ๋ ผ๋ฆฌ์ ์ธ๊ณผ๊ด๊ณ, ์ฌ๋ฌ ๊ฐ์ฒด๊ฐ ์ํธ์์ฉํ๋ฉฐ ๊ทธ ์ธ๊ณ์์ ํต์ฉ๋๋ ๊ธฐ๊ณ์ด(Machine Code)์ธ์ด ํต์ฌ!
์์คํ ํดํน์ ํ ๋๋ ์ปดํจํฐ ์ธ์ด, ์ด์์ฒด์ , ๋คํธ์ํฌ, ์ํธํ ๋ฑ ๋ค์ํ ๋ฐฐ์ธ ๊ฒ๋ค์ด ์กด์ฌํ์ง๋ง, ๊ทธ์ค
์์คํ ํด์ปค๊ฐ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ผ๋ก ์ต๋ํด์ผ ํ๋ ์ง์์ ์ปดํจํฐ ์ธ์ด์ ๊ดํ ๊ฒ์!
์์คํ ํด์ปค๋ ์ปดํจํฐ์ ์ธ์ด๋ก ์์ฑ๋ ์ํํธ์จ์ด์์ ์ทจ์ฝ์ ์ ๋ฐ๊ฒฌํด์ผ ํ๊ธฐ ๋๋ฌธ
๊ทธ๋ฐ๋ฐ ๋ฌธ์ ๋ PC ์ธ์ด์ธ ๊ธฐ๊ณ์ด๊ฐ ๋๋ฌด ์ดํดํ๊ณ ์์ฑํ๊ธฐ ํ๋ค๊ธฐ์ ๋ํดํ ๊ธฐ๊ณ์ด๋ฅผ ๋ฐ๊พผ ์ฌ๋์ด ์์ผ๋,
์ปดํจํฐ ๊ณผํ์ ์ค ํ ๋ช ์ธ David Wheeler๋ EDSAC์ ๊ฐ๋ฐํ๋ฉด์
์ด์ ๋ธ๋ฆฌ ์ธ์ด(Assembly Language)์ ์ด์ ๋ธ๋ฌ(Assembler)๋ผ๋ ๊ฒ์ ๊ณ ์
์ด์ ๋ธ๋ฌ๋ ์ผ์ข ์ ํต์ญ๊ธฐ๋ก์จ ๊ฐ๋ฐ์๋ค์ด ์ด์ ๋ธ๋ฆฌ์ด๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ์ปดํจํฐ๊ฐ ๊ธฐ๊ณ์ด๋ก ์ฝ๋๋ฅผ ์นํํด์ค
๊ทธ๋ฐ๋ฐ SW๋ฅผ ์ญ๋ถ์ํ๋ ์ฌ๋๋ค์ด ์ฌ๊ธฐ์ ์ญ๋ฐ์์ ๋ํด,
๊ธฐ๊ณ์ด๋ฅผ ์ด์ ๋ธ๋ฆฌ ์ธ์ด๋ก ๋ฒ์ญํ๋ ์ญ์ด์ ๋ธ๋ฌ(Disassembler)๋ฅผ ๊ฐ๋ฐ!!
์ฌ๊ธฐ์ ์ด์ ๋ธ๋ฆฌ ์ธ์ด์ ๋ํ ๊ฐ๋ต์ ์ธ ์ค๋ช ๋ฐ x86-64(x64)์ ๋ช ๋ น์ด๋ง ์๊ฐํฉ๋๋ค.
์ด์ ๋ธ๋ฆฌ์ด์ x86-64
์ปดํจํฐ์ ๊ธฐ๊ณ์ด์ ์นํ๋๋ ์ธ์ด!
๊ทธ ์ ์ ์ค๋ช ํ์๋ ๋ช ๋ น์ด ์งํฉ๊ตฌ์กฐ(ISA)๋ฅผ ์ค๋ช ํ ๋ ๋ดค๋์ CPU์ ์ฌ์ฉ๋๋ ISA์ ์ข ๋ฅ๋ ๋ง์ต๋๋ค.
๋ฐ๋ผ์ ์ด๋ค์ ์ข ๋ฅ๋งํผ ๋ง์ ์ด์ ๋ธ๋ฆฌ์ด๊ฐ ์กด์ฌํ๊ณ , ๋ง์ด ์์๋ก ์ข์ง๋ง ์ฐ๋ฆฐ x64 ์ด์ ๋ธ๋ฆฌ์ด๋ง!
๊ธฐ๋ณธ ๊ตฌ์กฐ๐งฑ
์ธ์ด์ ๊ธฐ๋ณธ์ ์ธ ๋ฌธ๋ฒ ๊ตฌ์กฐ๋ฅผ ๊ฐ๊ณ ํ์ ํด์ผ ๋ฌธ์ฅ์ด ์ดํด๋๋ฏ์ด ์ด์ ๋ธ๋ฆฌ ์ธ์ด๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค.
x64 ์ด์ ๋ธ๋ฆฌ ์ธ์ด๋ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ํ๊ตญ์ด๋ณด๋ค ํจ์ฌ ๋จ์ํ ๋ฌธ๋ฒ ๊ตฌ์กฐ๋ก ์ด๋ค์ ๋ฌธ์ฅ์
๋์ฌ์ ํด๋นํ๋ ๋ช ๋ น์ด(Operation Code, Opcode)
๋ชฉ์ ์ด์ ํด๋นํ๋ ํผ์ฐ์ฐ์(Operand, OP)
๋ช ๋ น์ด๐ซ
์ธํ ์ x64์๋ ๋งค์ฐ ๋ง์ ๋ช ๋ น์ด๊ฐ ์์ผ๋ ์ด ์ค์์ ์ค์ํ 21๊ฐ์ ๋ช ๋ น์ด๋ฅผ ๋ค๋ฃฐ ์์
์ ๋ฆฌํ ๋ช ๋ น์ด๋ค์ ๋ค์๊ณผ ๊ฐ์ด ๋ถ๋ฅ
๋ช ๋ น์ด ์ฝ๋ | |
๋ฐ์ดํฐ ์ด๋(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 |
ํผ์ฐ์ฐ์๐ฏ
TYPE PTR์ ํ์ ์ ๋ฐ๋ผ BYTE, WORD, DWORD, QWORD๋ก ๊ฐ๊ฐ 1-2-4-8byte๋ก ํฌ๊ธฐ๊ฐ ์ง์ ๋จ
ํผ์ฐ์ฐ์๋ ์ด 3๊ฐ์ง ์ข ๋ฅ๊ฐ ์ฌ ์ ์์ต๋๋ค.
- ์์(Immediate Value)
- ๋ ์ง์คํฐ(Register)
- ๋ฉ๋ชจ๋ฆฌ(Memory)
๋ฉ๋ชจ๋ฆฌ ํผ์ฐ์ฐ์๋ []์ผ๋ก ๋๋ฌ์ธ์ธ ๊ฒ์ผ๋ก ํํํ๋ฉฐ, ์์ ํฌ๊ธฐ ์ง์ ์(Size Directive) TYPE PTR์ด ์ถ๊ฐ ๊ฐ๋ฅ
๐๋ฉ๋ชจ๋ฆฌ ํผ์ฐ์ฐ์์ ์
๋ฉ๋ชจ๋ฆฌ ํผ์ฐ์ฐ์ | |
QWORD PTR [0x8048000] | 0x8048000์ ๋ฐ์ดํฐ๋ฅผ 8๋ฐ์ดํธ๋งํผ ์ฐธ์กฐ |
DWORD PTR [0x8048000] | 0x8048000์ ๋ฐ์ดํฐ๋ฅผ 4๋ฐ์ดํธ๋งํผ ์ฐธ์กฐ |
WORD PTR [rax] | rax๊ฐ ๊ฐ๋ฅดํค๋ ์ฃผ์์์ ๋ฐ์ดํฐ๋ฅผ 2๋ฐ์ดํธ ๋งํผ ์ฐธ์กฐ |
๐ฆ์๋ฃํ WORD์ ํฌ๊ธฐ๊ฐ 2๋ฐ์ดํธ์ธ ์ด์
์ด๊ธฐ ์ธํ WORD์ ํฌ๊ธฐ๊ฐ 16๋นํธ์ธ IA-16 ์ํคํ ์ฒ๋ก ๊ฐ๋ฐ๋์ด CPU์ WORD๊ฐ 16๋นํธ์ด๊ธฐ
๋๋ฌธ์, ์ด์ ๋ธ๋ฆฌ์ด๋ WORD๋ฅผ 16๋นํธ ์๋ฃํ์ผ๋ก ์ ์ํ๋ ๊ฒ์ผ๋ก ์ด์ ์ ๋ง์ถค
์ดํ ๊ฐ๋ฐ๋ IA-32, x86-64 ์ํคํ ์ฒ๋ CPU์ WORD๊ฐ 32, 64๋นํธ๋ก ํ์ฅ๋์์ต๋๋ค.
ํ์ง๋ง WORD ์๋ฃํ์ ํฌ๊ธฐ๋ฅผ ๋๊น์ง 16๋นํธ๋ก ์ ์งํ์์ผ๋ฉฐ ํธํ์ฑ ๋ฌธ์ ๋๋ฌธ!
๋ฐ์ดํฐ ์ด๋๐
์ด๋ค ๊ฐ์ ๋ ์ง์คํฐ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฎ๊ธฐ๋๋ก ์ง์ํจ
๋ฐ์ดํฐ ์ด๋ | |
mov (rdi, rsi) | ๋ฐ์ดํฐ ๊ฐ์ ๋ฃ๊ธฐ๋ง ํจ / (ris์ ๊ฐ์ rdi์ ๋์ ) |
lea (rsi, [rbx+8* rcx]) | ์ฃผ์๋ฅผ ๊ฐ์ ธ์ด / (rbx+8*rcx๋ฅผ rsi์ ๋์ ) |
์ฐ์ ์ฐ์ฐโ
๋ง์ , ๋บ์ , ๊ณฑ์ , ๋๋์ ์ฐ์ฐ์ ์ง์
์ฐ์ ์ฐ์ฐ | |
add (eax, 3) | ๋ง์ / (eax+=3) |
sub (eax, 3) | ๋บ์ / (eax -=3) |
inc (eax) | op์ ๊ฐ์ 1 ์ฆ๊ฐ / (eax++) |
dec (eax) | op์ ๊ฐ์ 1 ๊ฐ์ / (eax--) |
๋ ผ๋ฆฌ ์ฐ์ฐ๐ค - and & or
and, or, xor, neg ๋ฑ์ ๋นํธ ์ฐ์ฐ์ ์ง์
๋ ผ๋ฆฌ ์ฐ์ฐ | |
and | ๋นํธ ์ฐ์ฐ์๋ก and(๋ ๋ค 1) ์ญํ |
or | ๋นํธ ์ฐ์ฐ์๋ก or(ํ๋์ด์ 1) ์ญํ |
xor | ๋นํธ ์ฐ์ฐ์๋ก xor(1๊ฐ๋ง ์์ผ๋ฉด ๋ถ์ ) ์ญํ |
not | ๋นํธ ์ฐ์ฐ์๋ก not(๋ถ์ ) ์ญํ |
์ ๋ด์ฉ์ ์ฐ ๊ธฐ๋ณธ์ด๋ผ.. ๊ทธ๋ฅ ๋งํฌ ๋ณด์๊ณ ํ์ธ์ ๋๋ฌด ์ ๊ธฐ ํ๋๋ค์ ใ
์ฐธ๊ณ ๋ก 0xff..์ด๊ฒ ์ฌ๊ธฐ์ ํ์คํ 1์ด์์ ํด์ ์ 0xff..๋ก ๋น๊ตํ๋ฉด f๋ฅผ ์ ๋๊ฑด ์๋๊ฑฐ์์ ๊ทธ๋ฅ ๊ตฌ๋ถ..? ๋๋
TMI๋ก xor์ ์ฐ์ ๋๋ฒํ๋ฉด ๋ค์ ์๋ ๊ฐ์ผ๋ก ๋์๊ฐ๋ ์ฑ์ง์ ์ด์ฉํ ์ํธํ์ผ๋ก XOR_cipher๋ผ๋ ๊ฒ๋ ์์ด์
๋น๊ตโ๏ธ
๋ ํผ์ฐ์ฐ์(OP)์ ๊ฐ์ ๋น๊ตํ๊ณ , ๋ธ๋๊ทธ๋ฅผ ์ค์
๋น๊ต | |
cmp (op1, op2) | ์๋ก ๊ฐ์ ๋น๊ต, ๋ ์๋ฅผ ๋นผ์ / (op1 == op2์ธ ์์ผ๋ก) ์ด์ ์ ์ ์ ํ๋๊ทธ๋ก ํํ |
test | ์๋ก ๊ฐ์ and๋ก ๋น๊ต / ์ด๊ฑด ๋ณ๋ก ์ ์ธ๊ฑฐ ๊ฐ์ผ๋๊น ๋ญ ์ด๋ฐ ์์ผ๋ก๋ง ์ํด์.. |
๋ถ๊ธฐ๐
rip๋ฅผ ์ด๋์์ผ ์คํ ํ๋ฆ ๋ฐ๊ฟ
์ด ๋ถ๋ถ์ ๋๋ฌด ๋ง์ด ์กด์ฌํ๊ธฐ๋ ํ์ง๋ง ๋จ์ด ๋ป์ ๋ณด๋ฉด ๋๋ต์ ์ผ๋ก ํ์ ์ด ๊ฐ๋ฅํ๋๊น ํ๋ฆ๋ง!!
์ฌ์ง์ด ์กฐ๊ฑด ๋ถ๋ถ ํ ๋ถ์์ ์ผ๋ก ๋ธ๋ ค์ค๋ ์น๊ตฌ๋ค์ด๋๊น ํนํ ๊ทธ๋์
๋ถ๊ธฐ | |
jmp addr | addr๋ก rip์ด๋ํ๋ ๊ฒ |
je addr | ๋น๊ตํ ๋ ํผ์ฐ์ฐ์๊ฐ ๊ฐ์ผ๋ฉด rip๋ฅผ addr๋ก ์ด๋(jump if equal) |
jg addr | ๋น๊ตํ ๋ ํผ์ฐ์ฐ์ ์ค ์ ์๊ฐ ํฌ๋ฉด rip๋ฅผ addr๋ก ์ด๋(jump if greater) |
Opcode : ์คํ๐งฑ
push val : val๋ฅผ ์คํ ์ต์๋จ์ ์์ / pop reg : ์คํ ์ต์๋จ์ ๊ฐ ๊บผ๋ด์ reg์ ๋์
Opcode : ํ๋ก์์ ๐
ํน์ ๊ธฐ๋ฅ์ ์ํํ๋ ์ฝ๋ ์กฐ๊ฐ ์ฆ, ํจ์์ ๋น์ทํ๋ค๊ณ ์๊ฐํ๋ฉด ๋จ
ํ๋ก์์ ๋ฅผ ๋ถ๋ฅด๋ ํ์๋ฅผ ํธ์ถ(Call)์ด๋ผ๊ณ ๋ถ๋ฅด๋ฉฐ, ํ๋ก์์ ์์ ๋์์ค๋ ๊ฒ์ ๋ฐํ(Return)์ด๋ผ๊ณ ํจ
ํ๋ก์์ ๋ฅผ ํธ์ถํ ๋๋ ํ๋ก์์ ๋ฅผ ์คํํ๊ณ ๋์ ์๋์ ์คํ ํ๋ฆ์ผ๋ก ๋์์์ผ ํ๋ฏ๋ก,
call ๋ค์์ ๋ช ๋ น์ด ์ฃผ์(return address, ๋ฐํ ์ฃผ์)๋ฅผ ์คํ์ ์ ์ฅํ๊ณ ํ๋ก์์ ๋ฅผ rip๋ก ์ด๋
x64์ด์ ๋ธ๋ฆฌ์ธ์ด์๋ ํ๋ก์์ ์ ํธ์ถ๊ณผ ๋ฐํ์ ์ํ call, leave, ret ๋ช ๋ น์ด๊ฐ ์กด์ฌํจ
Call addr : ํธ์ถ
leave : ์คํํ๋ ์ ์ ๋ฆฌ
๐ก์คํํ๋ ์์ด๋?
์คํ์ ์์ ์ค(์ง์ญ๋ณ์, ํจ์ ๋๋ ์ฐ์ฐ๊ณผ์ ๋ฑ) ๋ถ์ฐจ์ ์ผ๋ก ์๊ฒจ๋๋ ์์ ๊ฐ๋ค์ ์ ์ฅํ๋ ์์ญ
๋ง์ฝ ์ด ์คํ ์์ญ์ ์๋ฌด๋ฐ ๊ตฌ๋ถ X ์ฌ์ฉํ๋ค๋ฉด ๋ฉ๋ชจ๋ฆฌ ์์ญ์ด ๊ฒน์น๋ ๋ฌธ์ ๋ฐ์ ↑
์์๋ก Aํจ์๊ฐ B๋ผ๋ ํจ์ ํธ์ถ ์, ์ด ๋์ด ๊ฐ์ ์คํ ์์ญ ์ฌ์ฉ ์ B์์ A์
์ง์ญ๋ณ์ ๋ชจ๋ ์ค์ผ ๊ฐ๋ฅ! ๋ฐ๋ผ์ ์ ์์ ์ธ ์ฐ์ฐ์ด ๋ถ๊ฐ๋ฅํ๋ ๋ฌธ์ ๊ฐ ์ฌ๊ฐํ๊ฒ ๋ฐ์
๋ฐ๋ผ์ ํจ์๋ณ๋ก ์๋ก๊ฐ ์ฌ์ฉํ๋ ์คํ์ ์์ญ์ ๋ช ํํ ๊ตฌ๋ถํ๊ธฐ ์ํด ์คํํ๋ ์ ์ฌ์ฉ!
ret : return address๋ก ๋ฐํ
Opcode : ์์คํ ์ฝ๐
์์คํ ์ ํดํน์ผ๋ก๋ถํฐ ๊ถํ ์ ์ด ๋ฐ ๋ณดํธ๋ฅผ ์ํด ์ปค๋ ๋ชจ๋์ ์ ์ ๋ชจ๋๋ก ๊ถํ์ ๋๋์ด ๊ด๋ฆฌ
์ปค๋ ๋ชจ๋
OS๊ฐ ์ ์ฒด ์์คํ ์ ์ ์ดํ๊ธฐ ์ํด ์์คํ SW์ ๋ถ์ฌํ๋ ๊ถํํ์ผ์์คํ , I/O, ๋คํธ์ํฌ ํต์ , ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฑ ๋ชจ๋ ์ ์์ค์ ์์ ์ ์ปค๋ ๋ชจ๋์์ ์งํ์์คํ ์ ๋ชจ๋ ๋ถ๋ถ์ ์ ์ด ๊ฐ๋ฅํ์ฌ ํด์ปค๊ฐ ์ง์ ์ ์์คํ ์ ๊ฑฐ์ ๋ฌด๋ฐฉ๋น ์ํ๊ฐ ๋จ์ด์ ๋ํ์ฌ ์์ธํ ๋ถ๋ถ์ ๋์ค์..
์ ์ ๋ชจ๋
OS๊ฐ ์ฌ์ฉ์์๊ฒ ๋ถ์ฌํ๋ ๊ถํ
๋ณดํต ์ฌ์ฉ์๋ค์ด ํ๋ ๊ธฐ๋ณธ์ ์ธ PC ์ฌ์ฉ ํ๋์ด ๋ชจ๋ ์ ์ ๋ชจ๋์์ ์งํ
๋ฆฌ๋ ์ค์์ ๋ฃจํธ ๊ถํ์ผ๋ก ์ฌ์ฉ์ ์ถ๊ฐ, ํจํค์ง ๋ค์ด๋ก๋ ํ์๋ ๋ง์ฐฌ๊ฐ์ง
์ ์ ๋ชจ๋๋ฅผ ํด์ปค๊ฐ ์ทจ๋ํด๋ ๊ถํ ๋ณดํธ ๊ฐ๋ฅ
์์คํ ์ฝ(System Call, syscall) - x64 ์ํคํ ์ฒ ์ฌ์ฉ
์ ์ ๋ชจ๋์์ ์ปค๋ ๋ชจ๋์ ์์คํ SW์๊ฒ ์ด๋ค ๋์์ ์์ฒญํ๊ธฐ ์ํด ์ฌ์ฉSW๋ ๋๋ถ๋ถ ์ปค๋์ ๋์์ด ํ์ํ๋ฏ๋ก ์์คํ ์ฝ์ด ํ์ํ ์ด์ Ex) ์ฌ์ฉ์๊ฐ cat flag๋ฅผ ์คํํ๋ฉด, cat์ ์ปค๋ ๋ช ๋ น์ด๋ก ํด์ผํ๋ฏ๋ก... syscall์ ์ฌ์ฉํจ
Syscall
x64 Syscall tables
์ข ๋ฅ๋ ๋ฌด์ง ๋ง๊ณ ๊ฒ์ํ๋ฉด ์ฝ๊ฒ ์ฐพ์ ์ ์์ผ๋ ์ธ์ธ ํ์๊ฐ ์๊ณ ,
๋์ค์ ์์ฝ๋ฉ์ ํ๋ค๋ณด๋ฉด ์์ฐ์ค๋ฝ๊ฒ ์ค์ํ ๋ช ๊ฐ์ง๋ ์ต์ํด์ง ๊ฑฐ์์
syscall | rax | arg0 (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 | X |
X |
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 |
์์ฝ๐๏ธ
- ๋ฐ์ดํฐ ์ด๋ ์ฐ์ฐ์
- mov dst, src : src์ ๊ฐ์ dst์ ๋์
- lea dst, src : src์ ์ ํจ ์ฃผ์๋ฅผ dst์ ๋์
- ์ฐ์ ์ฐ์ฐ
- add dst, src : src์ ๊ฐ์ dst์ ๋ํจ
- sub dst, src : src์ ๊ฐ์ dst์์ ๋บ
- inc op : op์ ๊ฐ์ 1 ๋ํจ / op++;
- dec op : op์ ๊ฐ์ 1 ๋บ / op--;
- ๋
ผ๋ฆฌ ์ฐ์ฐ
- and dst, src : dst์ src๊ฐ ๋ชจ๋ 1์ด๋ฉด 1, ์๋๋ฉด 0
- or dst, src : dst์ src ์ค ํ ์ชฝ์ด๋ผ๋ 1์ด๋ฉด 1, ์๋๋ฉด 0
- xor dst, src : dst์ src๊ฐ ๋ค๋ฅด๋ฉด 1, ๊ฐ์ผ๋ฉด 0
- not op : op์ ๋นํธ๋ฅผ ๋ชจ๋ ๋ฐ์
- ๋น๊ต
- cmp op1, op2 : op1์์ op2๋ฅผ ๋นผ๊ณ ํ๋๊ทธ๋ฅผ ์ค์
- test op1, op2 : op1๊ณผ op2์ AND ์ฐ์ฐ์ ํ๊ณ , ํ๋๊ทธ๋ฅผ ์ค์
- ๋ถ๊ธฐ
- jmp addr : addr๋ก rip ์ด๋
- je addr : ์ง์ ๋น๊ต์์ ๋ ํผ์ฐ์ฐ์์ ๊ฐ์ด ๊ฐ์ ๊ฒฝ์ฐ addr๋ก rip ์ด๋
- jg addr : ์ง์ ๋น๊ต์์ ๋ ํผ์ฐ์ฐ์ ์ค ์ ์์ ๊ฐ์ด ๋ ํด ๊ฒฝ์ฐ addr๋ก rip ์ด๋
- ์คํ
- push val : rsp๋ฅผ 8๋งํผ ๋นผ๊ณ , ์คํ์ ์ต์๋จ์ val์ ์๋๋ค
- pop reg : ์คํ ์ต์๋จ์ ๊ฐ์ reg์ ๋ฃ๊ณ , rsp๋ฅผ 8๋งํผ ๋ํจ
- ํ๋ก์์
- call addr : addr์ ํ๋ก์์ ๋ฅผ ํธ์ถ
- leave : ์คํ ํ๋ ์์ ์ ๋ฆฌ
- ret : ํธ์ถ์์ ์คํ ํ๋ฆ์ผ๋ก ๋์๊ฐ
- ์์คํ
์ฝ
- syscall : ์ปค๋์์ ํ์ํ ๋์์ ์์ฒญ
์ฐธ๊ณ ์๋ฃ(๋จ, ์ ๋ถ๋ถ์ ์ ๊ฐ ๋ฐฐ์ด ๋ด์ฉ ์์ฝ์ ๊ฐ๊น๊ธฐ ๋๋ฌธ์ ๊ฑฐ์ ์ ๋ด์ฉ๊ณผ ๊ฐ์ต๋๋ค.)
์ฐธ๊ณ ์ด๋ฏธ์ง
'๐โSystem_Study > ๐โDreamhack_Hacking' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Tool: pwntools (4) | 2022.04.04 |
---|---|
Tool: gdb (0) | 2022.03.29 |
Quiz: x86 Assembly (0) | 2022.03.27 |
Linux Memory Layout (0) | 2022.03.21 |
Computer Architecture (0) | 2022.03.21 |