어셈블리어의 기본 문법과 명령
어셈블리 명령어는 상당히 많다.
하지만 어셈블리언어로 코딩이 아닌 디버깅을 목적으로 하기 때문에
필수적으로 알아야할 기본적인 명령어만 알아두어도 좋다.
또한 기본 문법과 명령을 공부할때 막연하게 암기 하는 것 보다
좋은 예제를 통해서 그때그때 필요한 명령어를 찾아보는식으로 공부하는게 좋다.
- PUSH,POP
스택에 값을 집어넣는걸 PUSH, 스택에 있는 값을 가져오는 것이 POP이다. - MOV
MOV는 MOVE라고 해석할 수 있는데. 여기서는 값을 넣는다는 표현이 어울린다.
예로 MOV eax,ecx는 ecx를 eax에 넣는다라는 표현이다. - LEA
LEA는 MOV와 비슷한 명령이다. 차이점이라면 MOV는 값을 가져오는 것이고
LEA는 값이 들어있는 주소값을 가져온다 라는 뜻이다.
esi : 0x401000000
*esi : 5640EC83
lea eax, dword ptr ds:[esi]
esi 가 0x401000000이므로 eax에는 0x401000000이 들어온다
mov eax, dword ptr ds:[esi]
esi 가 0x401000000이므로 eax에는 0x401000000번지가 가르키는 560EC83값이 들어간다. - ADD
두 레지스터의 값을 더해서 앞의 레지스터에 저장한다
add eax,ebx
ebx와 eax를 더해서 eax에 저장한다. - SUB
ADD와 반대로 뺄셈을 한다. - INT
인터럽트를 일으키는 명령어 - CALL
함수를 호출하는 명령어.
해당 함수를 호출하고 작업이 끝난후 CALL다음 단계로 되돌아온다
함수에는 함수 에필로그인 RET가 있기에 반드시 다시 되돌아온다. - INC,DEC
INC는 i++; DEC는 i--; 와 같은 동작을 한다. - NOP
아무동작도 하지않고 형식상 존재한다. 다음 명령으로 넘기는 명령이다. - CMP
비교 명령어 - JMP
점프 명령어, CMP와 같이 쓰인다.
JMP명령어 중에서는 jmp, je, jne 가 자주 쓰인다.
jmp : 앞의 명령을 무시하고 무조건 점프
je : 앞의 비교구문이 같다면 점프 그렇지 않으면 다음명령으로 넘긴다.
jne : 앞의 비교구문이 틀리다면 점프한다. 그렇지 않으면 다음명령으로 넘긴다.
'Learning > └◆Reversing' 카테고리의 다른 글
[과제] gdb(디버거) 사용법 (0) | 2017.01.19 |
---|---|
[참고]어셈블리 예제 (0) | 2017.01.19 |
[참고]어셈블리 언어에 대해서_2 (0) | 2017.01.19 |
[참고]어셈블리 언어에 대해서 (0) | 2017.01.19 |