시스템 해킹

 1576, 1/79 회원가입  로그인  
   vngkv123
   gdb에서 call이후 브레이크를 걸었을때..

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


0x0804855c <main+103>:        call   0x80483c8 <<< fgets
0x08048561 <main+108>:        add    esp,0x10   <<< b* main+108걸고 r한 상태

이럴 때, 이 다음 주소에서 브레이크를 걸었을 때, esp-4가 ret이라는데

call에 의해 fgets명령이 전부 실행되고 함수의ret에서 pop eip이후 jmp eip만 실행이 안된 상태인가요?? 브레이크를 걸어서???

  Hit : 3060     Date : 2017/03/31 12:47



    
pwnnnt step in / step over 둘 중 어떤걸 하셨죠 ? 2017/03/31  
pwnnnt 아 main 함수에서 call <fgets()>를 한 다음 주소를 말하시는 건가요 ? 2017/03/31  
vngkv123 네 gdb상 그냥 call<fegts>다음에 b *로 걸었어요 2017/03/31  
vngkv123 0x0804855c <main+103>: call 0x80483c8
0x08048561 <main+108>: add esp,0x10 <<<< 여기에

b *main+108으로 걸은상태이고 저거 콜하는건 fgets함수입니다.
2017/03/31  
pwnnnt 그렇다면 jmp eip 된 상태입니다. 2017/03/31  
pwnnnt 0x08048561 <main+108>: add esp,0x10

이거는 함수호출규악 보시면 알겠지만, 함수 끝난 뒤 스택에서 인자를 정리하는 것입니다.
2017/03/31  
vngkv123 추가 질문 하나만 해볼게여 ㅠ

low addr high addr
~~ | sfp | ret | argv1 | argv2 | argv3....이런식으로 쌓일텐데

리턴까지 진행되면 뒤의 argv들은 알아서 정리되는건가요?? 아니면 스택에 남아있나요??
위의 fgets가 진행되었을때요
2017/03/31  
vngkv123 아아아아 그렇네요 ㅋㅋㅋ 알겠습니당 ! 2017/03/31  
pwnnnt 함수 호출 규약인데 규악이라고 적어놨네요 ;ㅁ;

low addr               high addr
fgets stack | sfp, main()_ebp | ret, <main+108> | argv1 | argv2 | argv3...

입니다.
2017/03/31  
pwnnnt 인자정리는 이해가신것 같아서.. 따로 안적었습니다 ! 2017/03/31