티스토리 뷰


어셈블리어 명령어(Opcode)

INC

operand 값이 1 증가 

 INC reg

 ex) INC EAX

 INC mem

 ex) INC [EBP-0x04] 

 DEC

operand 값이 1 감소

 DEC reg

 ex) DEC EAX 

 DEC mem

 ex) DEC [EBP-0x04] 

ADD

(a+=b 와 동일)

두 operand 값을 더해

첫번째 operand 값에 저장.

-첫번째 operand 에 상수가 올 수 없음

 ADD reg, reg

 ex) ADD EAX, EBX

 ADD mem, reg

 ex) ADD [EBP-0x04] EAX 

 ADD reg, mem 

 ex) ADD EBX, [EBP-0x08]

 ADD reg, imm

 ex) add ECX, 0x05 

 ADD mem, imm

 ex) ADD [EBP-0x04], 0x04

SUB

(a-=b 와 동일)

첫번째 operand 값에서

두번째 operand 값을 뺀 후

첫번째 operand값에 저장

- 첫번째 operand에 상수가 올 수 없음

 SUB reg, reg

 ex) SUB EAX, EBX

 SUB mem, reg

 ex) SUB [EBP-0x04], EAX

 SUB reg, mem

 ex) SUB EBX, [EBP-0x08]

 SUB reg, imm

 ex) SUB ECX, 0x05

 SUB mem, imm

 ex) SUB [EBP-0x04], 0x0A

 MOV

(a = b 와 동일)

두번째 operand 값을

첫번째 operand 값에 저장

 MOV reg, reg

 ex) MOV EAX, EBX

 MOV mem, reg

 ex) MOV [EBP-0x04], EAX

 MOV reg, mem

 ex) MOV EBX, [EBP-0x04]

 MOV reg, imm

 ex) MOV ECX, 0x0A

 MOV mem, imm

 ex) MOV [EBP-0x04], 0x0A

 AND

(bit 연산)

a &= b 와 동일.

첫번째 operand값과 두번째 operand 값을 2진수로 변환후 AND 연산한 결과값을 A에 저장.

 AND reg, reg

 ex) AND EAX, EBX

 AND mem, reg

 ex) AND [EBP-0x04], EAX

 AND reg, mem

 ex) AND EAX, [EBP-0x04]

 AND reg, imm

 ex) AND EAX, 0x04

 AND mem, imm

 ex) AND [EBP-0x04], 0x0A

 OR

(bit연산)

a |= b 와 동일.

첫번째 operand값과 두번째 operand 값을 2진수로 변환후 

OR 연산한 결과를 A에 저장.

 OR reg, reg

 ex) OR EAX, EBX

 OR mem, reg

 ex) OR [EBP-0x04], EAX

 OR reg, mem

 ex) OR EAX, [EBP-0x04]

 OR reg, imm

 ex) OR EAX, 0x05

 OR mem, imm

 ex) OR [EBP-0x04], 0x0A

 XOR (bit 연산)

a ^= b 와 동일.

첫번째 operand값과 두번째 operand 값을 2진수 로 변환 

후 XOR 연산한 결과를 A 에 저장.

 XOR reg, reg

 ex) XOR EAX, EBX

 XOR mem, reg 

 ex) XOR [EBP-0x04], EAX

 XOR reg, mem

 ex) XOR EAX, [EBP-0x04]

 XOR reg, imm

 ex) XOR EAX, 0x0A

 XOR mem, imm

 e) XOR [EBP-0x04], 0x0A

SHL & SHR (shift 연산)

2진수로 변환 후

첫번째 operand 값을 두번째 operand 값만큼 shift 연산

SHL = 왼쪽으로 이동

SHR = 오른쪽으로 이동

- 최대 8bit 이동 가능.

- 오른쪽 이동시 0 이하로 넘어가면 값이 사라진다.

 SHL reg, imm8

 ex) SHL EAX, 0x01

 SHL mem, imm8

 ex) SHL [EBP-0x04], 0x02

 PUSH

ESP (최상단) 지점에서 추가로 4byte(32bitOS)

공간 추가.

만들어진 공간에 operand 값을 넣어줌.

- PUSH 사용시 ESP가 0x04 감소

-PUSH는 공간을 추가하기 때문에 항상 메모리 정리가 필요하다.

 PUSH reg16/reg32

 ex) PUSH EAX

 PUSH mem16/mem/32

 ex) PUSH [EBP-0x04]

 PUSH imm16/imm32

 ex) PUSH 0x10

 POP

ESP 지점에서 4byte(32bitOS)만큼 역참조한 값을 operand에 저장하고 해당 지역은 해제됨.

-POP 사용시 ESP가 0x04 증가

- operand 값에 상수는 사용할수 없다. 

저장할 공간이 필요함.

 POP reg16/reg32

 ex) POP EAX

 POP mem16/mem32

 ex) POP [EBP-0x04]

 PUSHAD

범용 레지스터의 값들을 스택에

한번에 저장.(32byte)

-스텍프레임은 32byte 증가.

-들어가는 순서

EAX-ECX-EDX-EBX-ESP-EBP-ESI-EDI 순서로 들어감.

사용 용도 : 범용레지스터값을 스텍에 원본 백업. 

-중요한 값은 다른 레지스터를 황용하지 않는다.

 POPAD

스택의 데이터를 범용레지스터에 채우고 32byte 공간은 해제됨.

- POPAD 사용시 PUSHAD한 시점과

스텍프레임이 동일해야함.

그래야 제대로 된 값을 가져올 수 있다.

-채워지는 순서

EDI-ESI-EBP-ESP-EBX-EDX-ECX-EAX

사용 용도 : 백업해둔 레지스터값을 복원할때 사용.

 PTR

데이터 타입 재정의

(캐스팅 연산자 역할)

  ex) INC DWORD PTR [SBP-0x04]

 - 단독으로 사용 불가.

 - PTR 앞에는 데이터타입이 있어야 함.

 - PTR 뒤에는 사용할 변수 또는 주소값.


OFFSET

(전역변수의 주소를 구함)

&operand 와 동일(단 전역변수만)

 

 ex) MOV EAX, OFFSET global 

 - 전역변수의 주소를 구함.


 LEA

두번째 operand 값의 주소값을

첫번째 operand에 저장.


 LEA reg, mem

 ex) LEA EAX, [EBP-0x04]

 - 지역변수 전역변수 모두 가능.

 STOS

operand값을 역참조한 곳에 EAX 값을 저장.operand =[EDI]

 STOS mem

 ex) STOS DWORD PTR[EDI]

 - 배열을 초기화할 때 사용.

 - 사용시 반복문 필요.

 - EDI값이 실행될 때마다 하나씩 증가

 REP

(REPEAT)

ECX 를 참조하여 반복.

반복가능명령어(STOS,MOVS,SCAS)

연속된 문자열 처리

 ex) MOV ECX, 0x05

 REP STOS DWORD PTR[EDI]

 - ECX가 감소하면서 0이될 때까지 반복(ECX가 0과 같으면 빠져나감)

MOVS

ESI 역참조한 값을 EDI 역참조한 곳에 복사 후 ESI, EDI 증가.

ECX만큼 반복.


 MOVS dest, source

 MOV ECX, Len

 REP MOVS byte ptr[EDI], byte  ptr[ESI]

 MOV byte ptr[EDI], 0x00

마지막에 NULL을 넣어줘야 함.    

 - 문자열을 복사할 때 사용.   


TEST

(검사 , 확인 용도)

함수의 리턴값이 참인지 거짓인지 확인할때 사용.

if(함수결과)

- 계산은 하지만 operand에 영향 없음.

- 결과는 상태레지스터 (ZF)에 나옴.

AND bit 연산결과 0이면 ZF=SET

0이 아니면 ZF=CLOSE

 TEST reg, reg

 ex) TEST EAX, EBX

 TEST mem, reg

 ex) TEST [EBP-0x04], EAX

 TEST reg, mem

 ex) TEST, EAX, [EBP-0x04]

 TEST reg, imm

 ex) TEST EAX, 0x05

 TEST mem, imm

 ex) TEST [EBP-0x04], 0x04





Comments
최근에 올라온 글
최근에 달린 댓글
TAG
more
Total
Today
Yesterday