본문 바로가기

Learning/└◆Reversing

[참고]어셈블리어의 기본 문법과 명령


어셈블리어의 기본 문법과 명령


 

어셈블리 명령어는 상당히 많다.

 

하지만 어셈블리언어로 코딩이 아닌 디버깅을 목적으로 하기 때문에

 

필수적으로 알아야할 기본적인 명령어만 알아두어도 좋다.

 

또한 기본 문법과 명령을 공부할때 막연하게 암기 하는 것 보다

 

좋은 예제를 통해서 그때그때 필요한 명령어를 찾아보는식으로 공부하는게 좋다.

 

  • 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