gdb๋ ๋ฆฌ๋ ์ค์ ๋ํ์ ์ธ ๋๋ฒ๊ฑฐ์ค ํ๋! ELF - ๋ฆฌ๋ ์ค ์คํ ํ์ผ ํ์ - ํฌ๊ฒ ํค๋์ ์ฌ๋ฌ ํ์์ผ๋ก ์ด๋ฃจ์ด์ง --> ELF ์ ํค๋์ ์ง์ ์ (EP) ํ๋ ์กด์ฌ (OS๋ ELF๋ฅผ ์คํํ ๋ EP๋ถํฐ ํ๋ก๊ทธ๋จ ์คํ) //ํด๋น ๋ช ๋ น์ด๋ฅผ ํตํด ์ง์ ์ ํ์ธ ๊ฐ๋ฅ //entry point address readelf -h debugee(ํ์ผ๋ช ) entry point address : 0x1060 gdb์์ start ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด ์ง์ ์ ์ฃผ์๋ฅผ rip๊ฐ ๊ฐ๋ฆฌํค๊ณ ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค. gdb (gdb) start 1. registers : ๋ ์ง์คํฐ์ ์ํ๋ฅผ ๋ณด์ฌ์ค 2. disasm : rip๋ถํฐ ์ฌ๋ฌ์ค์ ๊ฑธ์ณ ๋์ค์ด์ ๋ธ(๊ธฐ๊ณ์ด -> ์ด์ ๋ธ๋ฆฌ)๋ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์ฌ์ค 3. stack : rsp๋ถํฐ ์ฌ๋ฌ์ค์ ๊ฑธ์ณ..
์ด์ ๋ธ๋ฆฌ์ด ๊ธฐ๊ณ์ด์ ์ผ๋์ผ ๋์๋๋ ์ธ์ด. ์คํํ์ผ๋ง ์์ด๋ ์ด์ ๋ธ๋ฆฌ ์ฝ๋๋ฅผ ๋ณผ ์ ์๋ค. ์ด์ง์๋ก ๋ ๊ธฐ๊ณ์ด๋ฅผ "๋์ปดํ์ผ๋ฌ" ๋ฅผ ์ด์ฉํ์ฌ ์ด์ ๋ธ๋ฆฌ์ด๋ก ๋ ์ฝ๋๋ฅผ ์ป์ด๋ด๊ณ , ์ด๋ฅผ ๋ถ์ํ๋ค. ๋๋ฒ๊ฑฐ GDB(GNU Debugger) C, C++ ๋ฑ์ผ๋ก ๋ง๋ค์ด์ง ์คํ ํ์ผ์ ๋๋ฒ๊น ํ๋ ๋๊ตฌ 1. ์์/์ข ๋ฃ ์์: gdb [ํ๋ก๊ทธ๋จ๋ช ] ์ข ๋ฃ: quit or q 2. ๋ฌธ๋ฒ ๋ณ๊ฒฝ set disassembly-flavor intel 3. ๋ถ์ ํด๋น ํจ์ ์ฝ๋: disas [ํจ์์ด๋ฆ] ์คํ : run or r ๋ธ๋ ์ดํฌ ํฌ์ธํธ : b [์ง์ ] ๋ธ๋ ์ดํฌ ํฌ์ธํธ ๊ฑธ๋ฆฐ ์์น ์ฝ๋ : disas ๋ธ๋ ์ดํฌ ํฌ์ธํธ ๋ค ์ง์ฐ๊ธฐ: d or dis ๋ค์ ๋ช ๋ น์ด : ni ์งํ : c ๊ฐ์ ์ ํ : jump [์์น] -> ํจ์, ํ, ๋ฉ๋ชจ..