티스토리 뷰
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 |
|
'Programming > Programming' 카테고리의 다른 글
[Tool] 리버싱툴 Ollydbg110 설정 (0) | 2015.08.07 |
---|---|
[어셈블리어] CALL 명령어 (0) | 2015.07.23 |
[어셈블리어] CMP,JMP 명령어 종류 (0) | 2015.07.23 |
[어셈블리어] 명령어와 Operand (0) | 2015.07.15 |
[리버싱] 레지스터 기초 (0) | 2015.07.15 |