< 함수 프롤로그 >
1. push ebp : 이전 함수의 ebp를 스택에 저장
2. mov ebp, esp : main 함수 스택 포인트를 따로 설정
3. mov DWORD PTR [ebp-0x4], 0xa : v1 (첫 번째 지역변수) = 10
4. mov DWORD PTR [ebp-0x8], 0x14 : v2 (두 번째 지역변수) = 20
5. mov eax, DWORD PTR [ebp-0x8] : v2를 eax 레지스터에 넣음
6. mov edx, DWORD PTR [ebp-0x4] : v1을 edx 레지스터에 넣음
7. add eax, edx : v1과 v2를 더함 /eax = eax + dex = v2 + v1
8. mov DWORD PTR [ebp-0xc], eax : v3 = v2+v1
9. mov eax, DWORD PTR [ebp-0xc]
10. mov DWORD PTR [esp+0x4], eax : printf의 두번째 인자는 v3임
11. mov DWORD PTR [esp], 0x80484f0 : printf의 첫번째 인자는 0x80484f0에 있는 값
12. call 0x80482f0 <printf@plt> : “plus : 30”이 나옴
< 함수 에필로그 >
13. leave
14. ret
[ 정리본]
'Reversing > 개념' 카테고리의 다른 글
[Reversing] Handray (0) | 2022.08.15 |
---|---|
PE 파일 & API & ELF 파일 (0) | 2021.06.25 |
[DreamHack] 5강 : hello-world.exe로 배우는 x64dbg 사용법 (0) | 2021.03.29 |
[DreamHack] 3강, 4강 : puts("hello world!\n"); → x86_64 asm (0) | 2021.03.28 |
[DreamHack] 2강 : x64 기초 (0) | 2021.03.28 |