본문 바로가기

reversing/Assembler

asm 시작하면서..

-_-근데 왜 내가 어셈블러를 하는거지?ㅋㅋㅋㅋ -0- 
커널 공부할려고 시작했는데 왠지 발을 잘못 담근듯...쿠쿡..ㅋㅋ
시작이라 간단하게 inline 으로 두줄만 넣어봤다.

#include "stdafx.h"

int sum(int a, int b)
{
__asm
{
mov eax, [ebp+8]
add eax, [ebp+12]
}
}

int _tmain(int argc, _TCHAR* argv[])
{
int sumValue;
sumValue = sum(1,2);
printf("%d\n", sumValue);
return 0;
}

__asm 은 어셈블러를 시작하는 예약어.
mov 는 첫번째 인자에 두번째 인자를 넣는다.(포인터 이동이라 하는게 맞나?)
add 는 첫번쨰 인자와 두번쨰 인자를 더한다.
eax는 레지스터(저장공간)
ebp는 함수가 시작되면 esp의 값으로 시작한다. 또한 ebp또한 함수의 시작부분을 가르킨다. 
esp의 경우 스택을 사용하여 계속 바뀌는 값이고, 그에 따른 고정된 값을 위해서 ebp를 사용한단다.
여기서 ebp+8 은 첫번째 인자값인 int a, ebp+12 는 int b가 된다.

결국 ebp+8의 값을 레지스터로 옮겼고 (mov eax, [ebp+8] ) 옮긴 값을 ebp+12의 값과 더한값을 반환하는 간단한 함수.. 근데 리턴이 없어도 알아서 반환하나 보다.(이건 알아보야겠다.)

심심해서 시작해서 죽을일을 벌려놓은 느낌이다..ㅎㅎ 그래도 열씨미 해야지.ㅎ 

'reversing > Assembler' 카테고리의 다른 글

NAND 게이트로 AND, OR, NOT 게이트 만들기  (4) 2010.05.12