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