Busan IT/Assembly2015. 10. 2. 17:46

==================================Outline====================================

pop

pushad

----------------------------------------------------------------------------


pop

pop에 대해 알아보자.

 

pop명령어의 작업순서는,

 

1. 메모리에서 값 추출

2. 주소 값을 증가

 

리틀 엔디안을 빅 엔디안으로 변환하여 지정된 레지스터에 저장한다.

 

 

//처리에 메모리가 개입하게 되면 사이클이 증가한다.

 

 

pushad

 

모든 일반 레지스터를 pushpop을 할수 있는 명령어이다.

 

 


 

 

 

 

popad의 기능이 제대로 작동하는지 메모리에 값을 변경한 후 값을 확인해보자.

 

 

 

eflageip레지스터는 사용자가 직접적으로 조작할 수 없는 레지스터이다. 이것을 간접접근이 가능하다가 일컫는다.

 

eflag의 값을 조작하기 위해서는 pushpop을 사용해야 한다.

eip는 간접접근 조차도 사용하지 못하게 보호해 놓았다.

 

 

프로시져의 본문, 요청과 반환

 

 

함수 호출은 'call' 명령어와 주소를 사용함으로써 해당 주소에 있는 프로시져를 수행하게 된다. 하지만 함수의 주소를 알기 위해서는 메모리를 살펴보아야 하기 때문에 함수의 주소 값의 라벨인 함수의 이름을 입력한다.

 

eip는 다음에 실행될 코드의 메모리 주소를 가리킨다.

 

//esp : 0012ff8c

 

//00 40 10 43

 

_start의 주소: 0x0040103E

Initialize의 주소: 0x00401010

call 이전의 esp : 0012ff8c

call 이전의 eip : 0040103e

 

_start : e8 FF FF FF CD

 

call 명령어는 opCode8e이다. call 명령어는 1bytemnemonic4byte의 주소 총 5byte이다.

 

initialize라는 함수를 호출하는 코드를 살펴보자.

 

e8 FF FF FF CD 라는 코드를 해석해보면, 현재 코드가 끝난 값으로부터 -51바이트가 된 곳에 있는 코드를 실행하라는 내용이다.




반응형
Posted by newind2000