-
์ด์ ๋ธ๋ฆฌ ์ฝ๋ ๋ถ์ 5 - example 5 :: ๋ฐ๋ณต๋ฌธSECURITY/REVERSING 2020. 7. 15. 16:38
* ์ด ๊ฒ์๊ธ์ AT&T ๋ฌธ๋ฒ์ ๋ฐ๋ผ ์์ฑ๋์์ต๋๋ค.
(AT&T ์ Intel ์ฐจ์ด ์ฐธ๊ณ -
.file "example5.c" .section .rodata .LC0: .string "number %d \n" .LC1: .string "%d * %d = %d \n" .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 subq $16, %rsp movl $0, -8(%rbp) jmp .L2 .L3: movl -8(%rbp), %eax movl %eax, %esi movl $.LC0, %edi movl $0, %eax call printf addl $1, -8(%rbp) .L2: cmpl $9, -8(%rbp) jle .L3 movl $0, -4(%rbp) jmp .L4 .L5: movl -8(%rbp), %eax imull -4(%rbp), %eax movl %eax, %ecx movl -4(%rbp), %edx movl -8(%rbp), %eax movl %eax, %esi movl $.LC1, %edi movl $0, %eax call printf addl $1, -4(%rbp) .L4: cmpl $4, -4(%rbp) jle .L5 movl $0, %eax leave .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
์ฒ์์ ๋นํฉํ์ง๋ง, ์ด๋ด ๋ฐ๋ณต๋ฌธ ์ด๋ผ๋ ๊ฒ์ ์์๋ค.
์กฐ๊ฑด๋ฌธ์ด ๋งค๊ฒจ์ง๋ ์์๋ ์ฝ๋๊ฐ ์งํ๋๋ ์์๋๋ก ๋งค๊ฒจ์ง๊ธฐ ๋๋ฌธ์, L3 ๊ฐ ๋จผ์ ์คํ๋์ง๋ง L2 ๊ฐ ๋จผ์ ์์ฑ๋์ด์๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
JMP ๊ด๊ณ๋ฅผ ๋ณด์ํ๋
L2 ์ L3 ๊ฐ ํ๋์ ๋ฐ๋ณต๋ฌธ์, L4 ์ L5 ๊ฐ ํ๋์ ๋ฐ๋ณต๋ฌธ์ ๊ตฌ์ฑํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
jle : jump if less or equel, ์ฆ <=
#include <stdio.h> int main() { int a = 0, b; while (a != 10) { printf("number %d \n", a); a++; } for (b = 0; b <= 4; b++) { printf("%d * %d = %d \n", a, b, a * b); } return 0; }
๋ ๋ฐ๋ณต๋ฌธ์ ๊ฐ๊ฐ while ๊ณผ for ๋ก ์์ฑํ์๋๋ฐ ์ด์ ๋ธ๋ฌ ์ฝ๋์์๋ ์ฐจ์ด๊ฐ ์์์ ์ ์ ์์๋ค.
๋ํ, L5 ์ ์ดํด๋ณด๋ฉด, "%d * %d = %d \n" ์ ์ถ๋ ฅํ๋ฏ๋ก printf ์ ํ์ํ ์ธ์๊ฐ 4๊ฐ์ด๋ค.
์ด๋ค์ ๋ค push ํ๊ณ printf ํจ์๋ฅผ ํธ์ถํ์ ๋ printf ํจ์๊ฐ ํ๋์ฉ pop ํด์์ ์ธ์๋ก ์ด๋ค๋ ์ฌ์ค์ ์ง์ํด๋ณผ ์ ์๋ค.
(์ฃผ์ด์ง ์์ ์ฝ๋์์ ๋งค printf ๊ฐ ๋๋ ํ์ eax ์ 0 ์ ์ ์ฅํ๋ ๊ฒ์ printf ํจ์์ ๋ฆฌํด๊ฐ์ธ๊ฐ?)
๊ทธ๋์ push ๋ eax (a*b ์ ์ฐ์ฐ ๊ฒฐ๊ณผ) , -12(%ebp) (=a) , -16(%ebp) , LC1 ์์๋๋ก ๋ค์ด๊ฐ๊ณ ,
printf๋ "%d * %d = %d \n", a, b, a * b ์ ์ธ์๋ก ํ์ฌ ์ถ๋ ฅํ๋ค๋ ๊ฒ์ ์ ์ ์๋ค.
๋ฐ๋ณต๋ฌธ์ ์กฐ๊ฑด๋ฌธ๊ณผ ๋ถ๊ธฐ๊ฐ ๋ง์์ ํท๊ฐ๋ฆด ์ ์๋๋ฐ, ๋ถ๊ธฐ์ ๋ฒํธ๋ฅผ ์ ์ํด์ ๋ฐฐ์นํด๋ณด๋ฉด ๋ต์ ์ป์ ์ ์์ ๊ฒ์ด๋ค.
์ด๋ก์จ ์ผ๋จ๋ฝ์ด ๋๋ฌ๋๋ฐ,
https://operatingsystems.tistory.com/entry/SP-Procedure-Call?category=495589
์ฌ๊ธฐ์์ ํท๊ฐ๋ฆฐ ๊ฐ๋ ๋ค์ ์ก์์ผ๋ ๋ค์ ๋ณผ ๋ ๋ชจ๋ฅด๊ฒ ์ผ๋ฉด ๋ค์ ๋ณด๋๋ก ํ์.
'SECURITY > REVERSING' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฆฌ๋ ์ค(Linux) ๊ธฐ์ด - 03 ํธ์ง๊ธฐ :: vi ์ฌ์ฉ๋ฒ (0) 2020.07.16 ๋ฆฌ๋ ์ค(Linux) ๊ธฐ์ด - 02 Permission, chmod, ํ์ดํ๋ผ์ธ(|), ๋ฆฌ๋ค์ด๋ ์ (>) (0) 2020.07.16 ์ด์ ๋ธ๋ฆฌ ์ฝ๋ ๋ถ์ 4 - example 4 :: ํจ์ (0) 2020.07.15 ์ด์ ๋ธ๋ฆฌ ์ฝ๋ ๋ถ์ 3 - example 3 :: ์กฐ๊ฑด๋ฌธ (0) 2020.07.15 ์ด์ ๋ธ๋ฆฌ์ด ๋ถ์ 2 - example 2 (2) 2020.07.14