reverse engineering

디스어셈블링 (함수의 구조)

LEIBNIZ 2017. 5. 22. 20:43

입력 받은 두 수 (a, b)를 더한 값을 지역변수 c에 담아 c를 리턴하는 c 함수이다.

int sum (int a, int b){

  int c = a + b;

  return c;

}


이를 어셈블리어로 표현해보면 아래와 같다.

push   ebp

mov    ebp, esp

push   ecx

mov    eax, [ebp + arg_0]        // 첫번째 인수를 eax 레지스터에 넣는다.

add     eax, [ebp + arg_4]        // 두번째 인수를 eax에 더한다.

mov    [ebp + var_4], eax        // 지역번수에 eax값을 넣는다.

mov    eax, [ebp + var_4]        // 리턴을 위해 eax에 지역변수 값을 넣는다.

mov    esp, ebp

pop     ebp

retn



push   ebp

mov    ebp, esp

이 부분이 함수의 시작을 알리는 부분이고


mov   esp, ebp

pop    ebp

이부분이 함수의 끝을 알리는 부분이다.