1. 메인함수에서 함수를 불러올때 인자를 주지않았는데 어떻게 함수가 정상실행 되는가?
2.YouWin함수는 어떻게 쉘을 실행시키는가
3.fscanf 역추적으로 풀기
fscanf가 어떤것인지는 알고 있었지만 레페런스를 찾아보지않고 처음에 풀려는 고집떄메, 역추적으로 문제를 풀었다.
0804809f <fscanf>:
804809f: 81 ec 00 10 00 00 sub $0x1000,%esp
80480a5: b8 03 00 00 00 mov $0x3,%eax //read 시스템콜
80480aa: bb 00 00 00 00 mov $0x0,%ebx // 0번 fd (stdin)
80480af: 89 e1 mov %esp,%ecx
80480b1: ba 00 10 00 00 mov $0x1000,%edx
80480b6: cd 80 int $0x80
80480b8: 89 e6 mov %esp,%esi //받은 값의 주소를 esi에
80480ba: 31 db xor %ebx,%ebx //0으로 초기화
080480bc <skipwhite>:
80480bc: 31 c0 xor %eax,%eax //0으로 초기화
80480be: ac lods %ds:(%esi),%al //esi를 1바이트 esi가 가리키는 값을 al에 옮김
80480bf: 3c 20 cmp $0x20,%al //스페이스인지 검사
80480c1: 74 f9 je 80480bc <skipwhite> //스페이스라면 다시 skipwhite
080480c3 <doit>:
80480c3: 2c 30 sub $0x30,%al //
80480c5: 3c 09 cmp $0x9,%al //al이 0x9보다 크면
80480c7: 77 0a ja 80480d3 <exitscanf> //점프
80480c9: 6b db 0a imul $0xa,%ebx,%ebx //ebx * 0xa
80480cc: 01 c3 add %eax,%ebx // ebx = ebx + eax
80480ce: 31 c0 xor %eax,%eax //0으로 초기화
80480d0: ac lods %ds:(%esi),%al //다음값
80480d1: eb f0 jmp 80480c3 <doit>
080480d3 <exitscanf>:
80480d3: 89 d8 mov %ebx,%eax
80480d5: 81 c4 00 10 00 00 add $0x1000,%esp
80480db: c3 ret
Summary:
거꾸로 따라가면 편하다.
hgvbmkQIHavkGg5wyk
'wargame > IO smash the stack' 카테고리의 다른 글
level4 (0) | 2014.05.27 |
---|---|
level3 (0) | 2014.05.27 |
level2_alt (0) | 2014.05.27 |
level2 (0) | 2014.05.12 |
level1 (0) | 2014.05.12 |