티스토리 뷰
함수 호출 규약 _ 기본적인 함수 호출 + 간단한 스택 사용
int main(int argc, char* argv[]) { sum(1, 2); return 0; } .text:080483F8 public main .text:080483F8 main proc near .text:080483F8 .text:080483F8 argc = dword ptr 8 .text:080483F8 argv = dword ptr 0Ch .text:080483F8 envp = dword ptr 10h .text:080483F8 .text:080483F8 000 push ebp .text:080483F9 004 mov ebp, esp .text:080483FB 004 push 2 .text:080483FD 008 push 1 .text:080483FF 00C call getsum .text:08048404 00C add esp, 8 .text:08048407 004 leave .text:08048408 000 retn
int getsum(int a, int b) { return a + b; } .text:080483EB public getsum .text:080483EB getsum proc near .text:080483EB .text:080483EB arg_0 = dword ptr 8 .text:080483EB arg_4 = dword ptr 0Ch .text:080483EB .text:080483EB 000 push ebp .text:080483EC 004 mov ebp, esp .text:080483EE 004 mov edx, [ebp+arg_0] .text:080483F1 004 mov eax, [ebp+arg_4] .text:080483F4 004 add eax, edx .text:080483F6 004 pop ebp .text:080483F7 000 retn .text:080483F7 getsum endp
.text:004C4980 sub_4C4980 proc near .text:004C4980 .text:004C4980 var_84= dword ptr -84h .text:004C4980 ptPos= tagPOINT ptr -80h .text:004C4980 var_78= byte ptr -78h .text:004C4980 var_C= dword ptr -0Ch .text:004C4980 var_4= dword ptr -4 .text:004C4980 .text:004C4980 000 push ebp .text:004C4981 004 mov ebp, esp .text:004C4983 004 and esp, 0FFFFFFF8h .text:004C4986 004 mov eax, large fs:0 .text:004C498C 004 push 0FFFFFFFFh .text:004C498E 008 push offset SEH_4C4980 .text:004C4993 00C push eax .text:004C4994 010 mov large fs:0, esp .text:004C499B 010 sub esp, 78h .text:004C499E 088 push esi .text:004C499F 08C call ds:GetTickCount .text:004C49A5 08C push eax ... 이하 생략
참고 :
https://ko.wikipedia.org/wiki/%ED%95%A8%EC%88%98_(%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D)
'Reversing > Assembly_x86' 카테고리의 다른 글
x86 어셈블리 기초 _ 세그먼트 레지스터 (0) | 2016.07.16 |
---|---|
x86 어셈블리 기초 _ 명령어 모음 (0) | 2016.07.14 |
x86 어셈블리 기초 _ 바이트 순서(byte order) (0) | 2016.07.13 |
x86 어셈블리 기초 _ 메모리, 주소 접근 모드 (0) | 2016.07.12 |
x86 어셈블리 기초 _ 정의, 레지스터 (0) | 2016.07.11 |