-
(리버싱) 1. 어셈블리, 메모리 구조리버싱 2016. 6. 14. 01:31반응형
어셈블리어 - mov, add, sub, push, pop
+ 레지스터 - esp, ebp, eip, eax
메모리영역 - 간단한 구조도, 스택1. 어셈블리어
(1) MOV
가. move의 약자.
나. 영어로는 "옮기다"라는 뜻이지만 여기서는 데이터를 복사한다는 뜻이다.
다. source에서 destination으로 데이터를 복사한다.
라. MOV [Destination], [Source]
ex. MOV reg, mem
(2) ADD
가. 말그대로 add
나. 영어 뜻과 같이 더하다 라는 의미가 있다.
다. destination에 source의 값을 더해서 Destination에 저장한다. SUB와 반대 성질을 갖고 있다.
라. ADD [destination], [source]
ex. ADD eax, 100
-> eax레지스터에 100을 더해서 다시 eax레지스터에 저장.
(3) SUB
가. subtract(빼다)의 약자.
나. 영어 뜻과 같이 빼다 라는 의미가 있다.
다. destination에 source의 값을 빼서 destination에 저장한다. ADD와 반대 성질을 갖고 있다.
라. SUB [destination], [source]
ex. SUB eax, 100
->eax레지스터에 100을 빼서 다시 eax레지스터에 저장.
(4) PUSH
가. Push on Stack의 약자.
나. 스택에 값을 넣는다.
다. ESP의 값이 4만큼 줄어들고 이 위치에 새로운 값이 채워진다.
->여기서 ESP의 값이 4만큼 줄어드는 이유는 스택의 구조가 뒤집어진 컵처럼 되어있기 때문이다.
->스택의 확장이라고 볼 수 있다.
라. PUSH [값]
ex. PUSH reg8
(5) POP
가. Pop from Stack의 약자.
나. 스택에서 값을 뺀다.
다. ESP의 값이 4만큼 늘어나고 그 위치에 있던 4byte만큼을 destination에 복사한다.
라. POP [destination]
ex. POP reg16
2. 레지스터
(1) ESP
가. Stack Pointer
나. 스택 메모리 주소를 가리킨다.
다. 단순히 스택 메모리 주소를 가리키지만 매우 중요해서 다른 용도로 쓰면 안된다.
(2) EBP
가. Pointer to data on the stack
나. 스택이 깨지지 않도록 한다.
다. 함수가 호출되었을 때, 그 순간의 스택 메모리 주소(ESP)를 잠시 저장하고 있다가, 함수가 리턴되고 되돌아올때 이 주소로 돌아옵니다.
(3) EIP
가. Instruction pointer
나. CPU가 처리할 명령어의 주소를 나타내는 레지스터(32비트)
다. CPU는 EIP에 저장된 명령어의 주소에서 명령어 하나 처리하고 그 길이만큼 EIP를 증가시킴
라. 직접 값을 변경 할 수 없음. 간접적으로 해야 함
(4) EAX
가. Accumulator for operands and results data
나. 산술연산 명령어에서 상수/변수 값의 저장용도로 사용.
다. 일반적으로 함수 리턴값에 사용됨.
라. 모든 Win32 API 함수들은 리턴값을 EAX에 저장한 후 리턴함.
3. 메모리 구조
*커널은 운영체제의 핵심. 모든 기능을 총괄하는 매니저라고 생각하면 된다.
*스택
http://sunrinnote.tistory.com/37 에서 C언어 문서화에서 스택에 관한 문서를 보면 어떤 식으로 PUSH되고 POP되는지 잘 알 수 있다.
저건 어디까지나 이해를 돕기위한 것이고, 실제로는 스택에 위에서 아래로 쌓인다. (거꾸로 되어있다.)
이렇게 되어있는 이유는 : 스택 영역에서 커널을 침범할 수 없도록
위 그림으로는 위쪽이 오른쪽, 아래쪽이 왼쪽이라고 생각하면 된다.
Ollydbg로 보면, 한줄씩 한줄씩 스택영역에 거꾸로 쌓인다는 것을 알 수 있다.
반응형