어셈블리 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
-