리버싱

11일차, caller, callee 복귀주소(RETN)

컴공 2013. 4. 22. 14:18
반응형

디버그모드는 EBX,ESI,EDI를 레지스터에 넣어서 사용한다.

마음대로 변수로 쓰겠다.

EBP+8 - 1ARGUMENT
EBP+C- 2ARGUMENT
EBP+4- RETURN ADDRESS

-----------------------------
이는 예전 운영체제(DOS)에서 사용하던 기법들로, 오늘날에는 예전 프로그램과의 호환성을 위해 존재한다.
SS : stack segment
DS : Data Segment
CS : Code Segment
ES : Extra Segment  -- 위에 있는 영역만으로 모자랄 때 사용한다.
FS : F's Segmnet
GS : G's Segment

00401000 -- 코드영역의 시작 부분은 대부분 같은데, 95, 98은 주소를 하나로 두고 때어다 썼다.
주소만 가지고는 알 수 없기에 SS에서 가르켜 줬다.

xp이후로는 하나의 주소를 메모리로 올려서 주소만 가지고도 알 수 있게 되었다.


CC부분은 DB80 부분과 마찮가지로 충돌이나 오류 방지를 위해서 공간을 할당 받는다.
int A = 10; 이라는 코드를 삽입시.
10이라는 데이터가 삽입되기 전에 먼저 CC라는 공간을 할당받아, 오류시 오류내용을 표기해준다.




PE Segmnet는 DOS시절에 사용하던 코드부분으로 이진수의 숫자로만 코드가 정형화되어 있기에, 알아보기 쉽다.
그러나 그 이후의 코드 특히나 IA32에서는 쓰지 않는다.



## SPRINT(ARR,"%d",a)를 이용한 callee (04_02_02_Quiz)



## CALLER과 CALLEE의 진행방식

func (int a, int b) {  }
main () {
    func (1,2);
}

4_3_2 문제풀이

문자 두개를 넘기는 호출함수였다.
f(int * ii, char jj[]){
 jj[1] = jj - 41
 char jj[1] == *ii
}
main () {
f(int * i , char j[])
}

## 문제(2)
12번째 자리에 s가 있으면 된다. for구문으로 회전한 수를 저장하고 B(12)로 만들어 저장후, 마지막으로 한번 더 돌아 C가 되지만 이미 argument2에는 B가 들어가 있다.

문제 (3)

반응형

'리버싱' 카테고리의 다른 글

13일차 크랙하기.  (0) 2013.04.30
12일차 포인터의 caller,callee. 반복문  (0) 2013.04.23
10일차, 브레이크 포인트, Frame Pointer Omission  (0) 2013.04.20
9일차, 시저암호화  (0) 2013.04.18
8일차, malloc, strcmp  (0) 2013.04.17