2014년 9월 5일 금요일

파이썬 해킹 프로그래밍, 2장. 디버거

2장에서는 디버거에 대해서 이론만 살표보자 ㅇㅇ
(별로 적을게 없겠군)

2.1 범용 cPU 레지스터

x86 명령어 셋에서 cpu는 8개의 범용 레지스터(EAX, EDX, ECX, ESI, EDI, EBP, ESP, EBX)를 사용

각 레지스터 이해 중요!
  • EAX : accumulator register , 산술 연산을 수행하기 위해 사용되거나, 함수의 리턴 값을 전달하기 위해 사용, 
  • EDX : data register, EAX에 확장 개념으로 사용된다. (곱하기와 나누기와 같이 복잡한 연산을 위해 추가적으로 데이터를 저장할 때 사용된다.)
  • ECX : counter register , 반복적으로 수행되는 연산에 주로 사용, ECX 레지스터는 값을 증가시키면서 카운트를 세는 것이 아니라 값을 감소 시키면서 카운트를 센다

    이 코드를 어셈블리언어로 바꿔서 해석해보면 ECX에 카운터가 10에서 0으로 감소하는 형식으로 구성 되어 있다.
  • ESI : 데이터 연산을 위한 원천지 인덱스(source index)를 나타내거나, 입력 데이터 스트림의 위치를 나타내기 위해 사용
  • EDI : 데이터 연산의 목적지 인덱스(destination index)를 나타내거나, 데이터 연산의 결과가 저장되는 위치를 나타내는 데 사용
  • ESP레지스터와 , EBP레지스터는 각기 스택 포인터(Stack Pointer)와 베이스 포인터(Base Pointer)레지스터이다. 
  • ESP : 스택의 가장 높은 위치(TOP)를 가리킨다. 곧 ESP는 리턴 주소를 가리키고 있다.
  • EBP : 호출 스택의 가장 낮은 위치(bottom)를 가리키는데 사용, 
  • EBX : 특정한 목적으로 설계된 레지스터가 아니다. 
  • EIP : 현재 실행 중인 명령의 주소를 가리킨다.

2.2 스택(stack) - 인터넷에 많으니까 정리 대충 요점만
  • FILO(First In Last Out) 구조
  • 함수를 호출할 때 해당 함수에 전달되는 파라미터를 스택에 push 하고, 함수가 리턴할 때는 pop을 함
  • esp레지스터는 스텍에 꼭대기를 가리키기 위해 사용되며, ebp레지스터는 스텍에 바닥을 가리키기 위해 사용된다.

댓글 없음:

댓글 쓰기