-
์ด์ ๋ธ๋ฆฌ์ด ๋ถ์ 1 - example 1SECURITY/REVERSING 2020. 7. 14. 17:53
* ์ด ๊ฒ์๊ธ์ AT&T ๋ฌธ๋ฒ์ ๋ฐ๋ผ ์์ฑ๋์์ต๋๋ค.
(AT&T ์ Intel ์ฐจ์ด ์ฐธ๊ณ -
๋ถ์ํ ์ด์ ๋ธ๋ฆฌ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
.file "example1.c" .section .rodata .LC0: .string "Hello world" .text .globl main .type main, @function main: .LFB0: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 movl $.LC0, %edi movl $0, %eax call printf movl $0, %eax popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE0: .size main, .-main .ident "GCC: (Ubuntu 4.8.4-2ubuntu1~14.04.1) 4.8.4" .section .note.GNU-stack,"",@progbits
๋จผ์ , ์ด ์ด์ ๋ธ๋ฆฌ ์ฝ๋๋ AT&T ๋ฌธ๋ฒ์ ์ฌ์ฉํ์์ ์ ์ ์๋ค.
๋จผ์ , . (์จ์ ) ์ "current location" ์ ์๋ฏธํ๋ค.
ํ ์ค์ฉ ์ดํด๋ณด๋ฉด,
.file : (์ผ๋ฐ์ ์ผ๋ก) ๋๋ฒ๊ฑฐ์์ ์ฌ์ฉํ๋ ์๋ณธ ์์ค ํ์ผ ์ด๋ฆ
.rodata ์น์ ์ ์ : ์ด ์น์ ์ ์ฝ๊ธฐ ์ ์ฉ ๋ฐ์ดํฐ ๋ณ์์ด๋ค
LC0 ๋ณ์์ ์ํด ์ ๊ทผํ ์ ์๋ "Hello world" ๋ฌธ์์ด
.text ์น์ : ์๋ก์ด section ์ ์์ํ๋ ๊ฒ์ผ๋ก, text section ์ ์ฝ๋๋ค์ ์ ์ฅํ ์น์ ์
main ํจ์ ์ ์. main: ์ด ์์์ด๊ณ , ret ์ด main ํจ์์ ๋์ด๋ค.
.LFB0 : ํจ์์ ์์์ ์๋งํ๋ "local label"
.cfi_startproc : "call frame information" . ์ด์ ๋ธ๋ฌ์๊ฒ dwarf format ๋๋ฒ๊น information ์ ๋ง๋ค๋๋ก? ์ง์
pushq % rbp : ํจ์ ํ๋กค๋ก๊ทธ.
ํ์ฌ์ rbp (๋ฒ ์ด์ค ๋ ์ง์คํฐ) ๊ฐ์ ์ ์ฅ (Stack ์ push)
(* 64 bit ํ๊ฒฝ์์๋ esp / ebp ๊ฐ ํ์ฅ๋์ด rsp / rbp ๊ฐ ๋๋ค.)
๋๋ณด๊ธฐ(esp ๋ ํจ์ ๋์ ์ค์ ๋ณ๊ฒฝ๋ ์ ์์ง๋ง, ebp ๋ ๋ณ๊ฒฝ๋์ง ์๋๋ค. ์์ธํ ๋ด์ฉ์
2020/07/08 - [SECURITY/REVERSING] - REVERSING ์์ํ๊ธฐ - ๊ธฐ์ด ๊ฐ๋ 4 :: ์ด์ ๋ธ๋ฆฌ ์ธ์ด)
.cfi_def_cfa_offset 16
.cfi_offset 6, -16
movq %rsp, %rbp : ํจ์ ํ๋กค๋ก๊ทธ.rsp ๋ฅผ rbp ๋ก ์ด๋ (๋ฒ ์ด์ค ๋ ์ง์คํฐ = ์คํ ํฌ์ธํฐ ;)
.cfi_def_cfa_register 6
movl $.LC0, %edi : edi ๋ ์ง์คํฐ์ LC0 ๋ก ์ ๊ทผํ๋ ๋ฌธ์์ด ์ ์ฅ
movl $0, %eax : eax ๋ ์ง์คํฐ์ ๋ฆฌํด๊ฐ 0 ์ ์ฅ
call printf : ํจ์ prinf ์ฝ
movl $0, %eax : eax ๋ ์ง์คํฐ์ ๋ฆฌํด๊ฐ 0 ์ ์ฅ
popq %rbp : ํจ์ ์ํ๋ก๊ทธ.leave. ํจ์ ์ ์ rbp ๋ฅผ ๊ฐ์ง๊ณ ์์ rsp ๋ฅผ ๋ค์ ์ค์
.cfi_def_cfa 7, 8
ret : ํจ์ ์ํ๋ก๊ทธ. ํจ์ ๋ !
.cfi_endproc : ํจ์ ๋
.LFE0 : local label
.size main, .-main์ฃผ์ด์ง ์ด์ ๋ธ๋ฆฌ์ด๋ฅผ c์ธ์ด๋ก ์์ ํ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ๋ค.
#include <stdio.h> int main() { printf("Hello world"); return 0; }
'SECURITY > REVERSING' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ด์ ๋ธ๋ฆฌ ์ฝ๋ ๋ถ์ 3 - example 3 :: ์กฐ๊ฑด๋ฌธ (0) 2020.07.15 ์ด์ ๋ธ๋ฆฌ์ด ๋ถ์ 2 - example 2 (2) 2020.07.14 ๋ฆฌ๋ ์ค(Linux) ๊ธฐ์ด - 01 ๋ช ๋ น์ด (0) 2020.07.14 REVERSING ์์ํ๊ธฐ - VMware & Ubuntu Linux 32 bit and 64 bit ์ค์นํ๊ธฐ (1) 2020.07.09 REVERSING ์์ํ๊ธฐ - ๊ธฐ์ด ๊ฐ๋ 4 :: ์ด์ ๋ธ๋ฆฌ ์ธ์ด (0) 2020.07.08