22018, 1/1101 회원가입  로그인  
   qkqhxla
   ftz level19

http://www.hackerschool.org/HS_Boards/zboard.php?AllArticle=true&no=30921 [복사]


system함수가 아예 attackme 소스코드에 포함되지 않았는데....

gdb로 attackme 실행후, main함수에 브레이크포인트를 걸고,

실행후, disas system이나, 또는 print system명령으로 system함수를 보면

올라가있다고 나오는데.. 어떤원리로 올라가있는거죠?? 궁금합니다.....

  Hit : 10737     Date : 2013/06/07 04:39



    
kumi123 모든 프로그램은 0x0 ~ 0xffffffff 의 독자적인 메모리 구조를 가집니다.. 이걸 리버싱 용어로는 이미징이라고 하구요.

실질적으로 가지는게 아니라, 운영체제가 잘 조절 하는 거죠..


결국, 프로그램 하나가 이미징되면, 나머지 환경변수나 api 들이 함꼐 올라가게 됩니다.. ( 가상으로 )

그래서, 볼 수 있는 겁니다.

마지막 코드영역을 보면, leave나오고 ret 이라고 나올 겁니다.. 생략되는 것두 있구요..

보통 어셈에서 call을 하면, ret이 스택에 알아서 들어가집니다.. call 코드의 주소를 저장해서요
2013/06/07  
kumi123 call 코드 -> call코드의 다음 코드의 주소 2013/06/07  
qkqhxla 나머지 환경변수나 api들이 함께 가상으로 올라간다... 그래서 가상으로 올라간 system주소를 볼 수 있다.. 요점이 그거죠??

감사합니다!!
2013/06/07  
whitetie RTL 이용하시면 됩니다. 2013/06/15