
LEA(Load Effective Address)
- 두 번째 Operand 주소를 계산하고 첫 번째 Operand에 저장한다.
- []연산자를 제외하고 두 번째 Operand로 Expression이 허용이 되지 않는다.
- MOV eax, edx+4: MOV에 + 연산을 사용 할 수 없다
- MOV eax, [edx+4]: []는 포인터 역할을 하므로 edx의 주소 + 4 가된다 *(edx + 4)
- LEA eax, [edx+4]: edx+4 값을 eax에 저장하는 의미이다. edx + 4
SCAS(SCAn String)
- AL / AX / EAX에 저장되어 있는 값과 EDI가 가르키는 곳에 저장되어 있는 값을 비교한다.
(EAX 값 <-- 비교 --> EDI 주소 값)
- 0개에서 2개까지 피연산자를 쓸 수 있다.
- byte, word, double word를 비교할 수 있다.
- SCASB: EAX안에있는 AL(1byte)값 과 EDI 안에있는 1byte값을 비교한다.
- SCASW: EAX안에있는 AX(2byte)값 과 EDI 안에있는 2byte값을 비교한다.
- scasb는 위 두줄에서 저장된 eax 레지스터와 edi 레지스터 안에있는 1byte 값을 비교한다.
- jnz 명령어를 통해 비교명령어의 결과값에 따라 수행동작을 다르게 설정한다.
STOS(STOre String)
- AL / AX / EAX에 저장되어있는 값을 EDI 레지스터가 가르키는 곳에 저장한다.
- byte, word, double word를 저장할 수 있다.
- call _func: call을 통해 저장된 값은 EAX에 저장된다.
- lea edi, [ebp+var_4]: ebp레지스터의 값을 edi에 로드한다.
- stosb: EDI 1byte 공간에 저장한다
- STOSB: AL의 내용을 EDI가 가르키는 offset위치의 메모리에 저장(1byte)
REP(REPeat)
- MOVS, SCAC, STOS 등 여러 명령어에 접두사 형식으로 사용되며 ECX레지스터에 저장된 값 만큼 해당 명령어를 반복해서 실행한다.
- mov ecx, eax: eax의 값을 ecx에 복사해서 몇번 카운트 할 것인지 설정한다.
- rep movsb: movsb를 통해 ESI의 값(1byte)을 EDI(1byte)에 데이터를 복사한다.
Stack
- 프로그램 실행 시 사용되는 메모리 영역 중 하나이다.
- Thread 단위로 생성된다.
- 시작 위치는 Random하다. (대체로 비슷한 위치에서 시작하나, 동일함이 보장되지 않는다.)
Stack의 용도
1. 지역변수를 저장한다. (주목적)
2. 함수 매개변수를 전달한다.
3. 함수 호출관련 정보를 알려준다.
4. OS에서 필요할 경우 사용한다.
5. 임시 데이터 백업에 이용한다.
- Empty Stack, Full Stack 중 인텔에서는 Full Stack을 사용하고 있다.
- Descending Stack, Ascending Stack 중 인텔에서는 Descending Stack을 사용하고 있다.
PUSH
- 먼저 ESP를 감소 시키고 16비트나 32비트 출발지 피연산자를 스택에 복사한다.
- PUSH의 용도는 지역변수를 위한 공간할당, 함수 인자 전달, 단순 백업이 있다.
POP
- ESP가 가리키는 곳에 저장된 내용을 목적지 피연산자에 저장 후 ESP값을 증가시킨다.
EIP 값을 변경하는 명령어
JMP
- EIP 값을 변경하기 전에 스택에 백업을 하지 않는다.
- 조건 분기가 가능한 명령어 형태가 존재한다. (JZ, JNZ, JA, JB, JG 등)
CALL
- EIP 값을 변경하기 전에 스택에 백업을 해둔다.
- 조건 분기가 가능한 명령어 형태가 존재하지 않는다.
RETN
- 의미상 POP EIP와 동일하지만 POP EIP와 같은 명령어는 없기 때문에 RETN을 사용한다. (RERN = POP EIP)
- RETN n 의 경우 ADD ESP, n 동작이 추가된 것과 동일하다.
'Hacking & Security > Reversing' 카테고리의 다른 글
리버싱 분석 환경 차이점 (0) | 2019.10.17 |
---|---|
어셈블리 명령어 정리 (1) (1) | 2019.10.16 |
레지스터(Register) 개념, 종류 (3) | 2019.10.15 |
공부&일상 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요! 질문은 언제나 환영입니다😊