728x90
mov, jmp ์ด๋ฐ ๊ธฐ๋ณธ ๋ช ๋ น์ด๋ ๋ค ์๋ ์ํ๋ก ๊ฐ์ ํ๊ฒ ๋ค. ๊ธฐํ๊ฐ ๋๋ค๋ฉด ์ด ๋ถ๋ถ๋ ํฌ์คํ ํ๊ฒ ์ผ๋ ํ์คํ์ง๋ ์๋ค.
์คํ ๊ธฐ๋ณธ ๋ช ๋ น์ด push, pop
push val
์คํ ์ต์๋จ์ val์ ๋ฃ์
sub rsp 8 ;์คํ ํฌ์ธํฐ๋ฅผ 8๋งํผ ์ค์ (์ฆ ์คํ ํฌ๊ธฐ๋ฅผ ํ์นธ ๋๋ฆผ)
mov [rsp] val ;rsp๊ฐ ๊ฐ๋ฆฌํค๋ ์์น์ val ๋ฃ์
pop reg
์คํ ๋งจ ์๊ฐ์ ๊บผ๋ธํ reg์(addr์๋!!) ๋์
add rsp 8 ;์คํ์ ํ์นธ๋งํผ ์ค์
mov reg [rsp-8] ;์๋ rsp๊ฐ ์๋ ๊ณณ์ ๋ฐ์ดํฐ๋ฅผ reg์ ๋์
ํจ์ ํธ์ถ๊ท์ฝ์ ๋์ค๋ ๋ช ๋ น์ด๋ค
call addr
addr์ ์๋ ํ๋ก์์ (ํจ์์ ๋น์ทํ ์ฝ๋ ์กฐ๊ฐ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋จ) ํธ์ถ (์ฐธ๊ณ ๋ก call ์ ์ SYSV์์๋ ์ธ์๋ฅผ ๋ ์ง์คํฐ๋ก ์ ๋ฌํจ)
push ret_addr ;๋์ค์ ๋์๊ฐ์ผํ ์ฃผ์ ์คํ์ ์ ์ฅ (ํ์ฌ rip ๋ฐ๋ก ๋ค!)
jmp addr ;addr๋ก ์ด๋
(์ฐธ๊ณ ) call ์ดํ ๊ณผ์
push rbp ;caller rbp๋ฅผ ์คํ์ ์ ์ฅ
mov rbp, rsp ;rbp๋ฅผ ์คํ ๋งจ์๋ก ์ฎ๊น (์๋ก์ด ํจ์์ ์คํ์ ํ ๋นํ๋ ค๊ณ !)
ํจ์ ์ํ๋ก๊ทธ ๊ณผ์
leave
์คํ ํ๋ ์ ์ ๋ฆฌ
mov rsp, rbp ;ํ์ฌ rbp๊ฐ ์๋ ๊ณณ์ผ๋ก rsp์์น ๋ณ๊ฒฝ
pop rbp ;ํ์ฌ ์คํ์๋ ๊ธฐ์กด ์คํํ๋ ์์ rbp๊ฐ ๋ค์ด์์. ๊ฑฐ๊ธฐ๋ก rbp ์์น ๋ฐ๊ฟ
ret
๊ธฐ์กด ์์น๋ก ์ด๋
pop rip ;๊ธฐ์กด callee ์คํ ์ต์๋จ์๋ ret_addr๊ฐ ๋ค์ด ์์์ ๊ฑฐ๊ธฐ๋ก rip ์ด๋
ํจ์(ํ๋ก์์ ) ์คํ์ ์คํ์ ์ํ๋ฅผ ์ ๋ฆฌํด ๋ณด์๋ค. ์ด์ ๋ํด์๋ ๋ค์ ํฌ์คํธ์์ ๋ ์์ธํ ๋ค๋ค๋ณด๋๋ก ํ๊ฒ ๋ค.
'๐ฅ๏ธ Computer Science > System' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[System] ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ (x64, x32, 64bit, 32bit) (0) | 2023.03.29 |
---|---|
[Pwnable] ์์คํ ์ฝ(syscall), ์ ธ, ์ปค๋๋ชจ๋ vs ์ ์ ๋ชจ๋ (0) | 2023.03.26 |
[Assembly] x86 ์ด์ ๋ธ๋ฆฌ ํท๊ฐ๋ฆฌ๋ mov, PTR ์ ๋ฆฌ (0) | 2023.03.19 |
[System] ์ปดํจํฐ ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ / ๋ ์ด์์ (0) | 2023.03.19 |
[System] ์ปดํจํฐ ๊ตฌ์กฐ, ํฐ ๋ ธ์ด๋ง ๊ตฌ์กฐ, x86-64, ๋ ์ง์คํฐ (0) | 2023.03.17 |