Github avatar

GyeongSu Han's Github Pages

어셈블리 intel x86

Jun 28, 2015 · Computer Structure

오퍼랜드

  • 어셈블리에서 피연산자와 같은 역할을 함.
데이터 타입
  • BYTE

    • 부호없는 1Byte
  • WORD

    • 부호없는 2Byte
  • DWORD

    • 부호없는 4Byte
증가/감소 연산자
  • INC

    • 오퍼랜드를 1 증가시킨다.

      INC reg INC mem

      ex) INC eax —> eax의 값을 1증가시킨다.

  • DEC

    • 오퍼랜드를 1 감소시킨다.

      DEC reg DEC mem

      ex) DEC [ebp - 4] —> (ebp - 4)가 가르키는 메모리에 대한 값을 1감소시킨다.

  • ADD

    • 오퍼랜드1에 오퍼랜드2의 값을 더한다.

      ADD reg, reg ADD mem, reg ADD reg, mem ADD reg, imm ADD mem, imm

      ex) ADD eax, 0xf —> eax에 0xf(15)를 더한다

  • SUB

    • 오퍼랜드1에 오퍼랜드2의 값을 뺀다.

      SUB reg, reg SUB mem, reg SUB reg, mem SUB reg, imm SUB mem, imm

      ex) SUB [ebp - 4], 0xf —> (ebp - 4)가 가르키는 메모리에 대한 값을 0xf를 뺀다.

데이터
  • MOV

    • 오퍼랜드2의 내용을 오퍼랜드1에 복사한다.

      MOV reg, reg MOV mem, reg MOV reg, mem MOV reg16, segreg MOV segreg, reg16 MOV reg, imm

      ex) MOV eax, 0x10 —> eax레지스터에 0x10(16)을 저장한다.

  • LEA

    • 오퍼랜드2의 주소를 오퍼랜드1에 넣는다.

      LEA reg, mem

      ex) LEA eax, [ebp-0x13] —> eax에 (ebp-0x13)의 주소를 넣음

  • PUSH

    • 오퍼랜드의 값을 스택메모리 최상단에 저장한다.

      PUSH reg16/32 PUSH mem16/32 PUSH segreg PUSH imm16/imm32

      ex) PUSH eax —> eax의 값을 스택메모리 최상단에 저장한다.

  • POP

    • 스택메모리 최상단에 있는 값을 오퍼랜드에 저장한다.

      POP reg16/reg32 POP mem16/mem32 POP segreg

      ex) POP eax —> 스택메모리 최상단에 저장된 값을 eax에 저장한다.

  • PTR

    • 사용할 메모리에 대한 주소와 크기를 지정해 준다.

      크기 PTR 주소

      ex) DWORD PTR [esp+0x1c] —> (esp+0x1c)를 시작으로 DWORD(4Byte)크기만큼을 사용한다고 선언.

  • TEST

    • 함수리턴 및 성공여부 분별에 사용. 묵시적 AND연산을 수행한다.

      TEST reg, reg TEST mem, reg TEST reg, mem TEST reg, imm TEST mem, imm

      ex) TEST eax, ebx -> eax와 ebx를 AND연산을 하고, 플래그에 값을 주지만 eax와 ebx에는 영향을 주지 않는다.

  • CMP

    • 묵시적 비교를 수행

      CMP reg, reg CMP mem, reg CMP reg, mem CMP reg, imm CMP mem, imm

      ex) CMP DWORD PTR [esp+0x14],0x9 —> (esp+0x14)에 있는 값과 0x9를 비교하여 플래그에 값을 줍니다.

  • JMP

    • 무조건 분기, C언어의 goto함수와 같은 기능

      JMP label JMP reg16 JMP mem16/mem32

      ex) JLE 0x8048419 <main+85> —> 메인함수의 85번째코드로 이동

    • 그외 J로 시작할경우 비교후 점프하는 구문일 가능성이 높음.
  • CALL

    • 함수 호출에 사용, 함수 종료 이후에 되돌아올 주소 값을 저장, 리턴값을 STACK에 저장 CALL 0x80482f4 printf@plt —> printf함수를 호출하였다.
  • RET

    • 함수 종료에 사용 (return과 같은 기능) RET imm8
  • NOP

    • 아무 동작도 수행하지 않는 코드, 메모리공간이 비게될경우 NOP으로 채워넣는다.

      NOP