0x0804854c <main+0>: push %ebp
0x0804854d <main+1>: mov %esp,%ebp
0x0804854f <main+3>: sub $0x40,%esp
0x08048552 <main+6>: movl $0x32,0x8(%esp)
0x0804855a <main+14>: movl $0x0,0x4(%esp)
0x08048562 <main+22>: lea -0x32(%ebp),%eax
0x08048565 <main+25>: mov %eax,(%esp)
0x08048568 <main+28>: call 0x80483c8 <memset@plt>
0x0804856d <main+33>: movl $0x804869f,(%esp)
0x08048574 <main+40>: call 0x8048438 <puts@plt>
0x08048579 <main+45>: lea -0x32(%ebp),%eax
0x0804857c <main+48>: mov %eax,0x4(%esp)
0x08048580 <main+52>: movl $0x80486b2,(%esp)
0x08048587 <main+59>: call 0x80483f8 <scanf@plt>
0x0804858c <main+64>: lea -0x32(%ebp),%eax
0x0804858f <main+67>: mov %eax,(%esp)
0x08048592 <main+70>: call 0x8048408 <strlen@plt>
0x08048597 <main+75>: cmp $0x31,%eax
0x0804859a <main+78>: jbe 0x80485b4 <main+104>
0x0804859c <main+80>: movl $0x80486b5,(%esp)
0x080485a3 <main+87>: call 0x8048438 <puts@plt>
0x080485a8 <main+92>: movl $0x0,(%esp)
0x080485af <main+99>: call 0x8048448 <exit@plt>
0x080485b4 <main+104>: lea -0x32(%ebp),%eax
0x080485b7 <main+107>: mov %eax,0x4(%esp)
0x080485bb <main+111>: movl $0x80486cb,(%esp)
0x080485c2 <main+118>: call 0x8048418 <printf@plt>
0x080485c7 <main+123>: mov $0x0,%eax
0x080485cc <main+128>: leave
0x080485cd <main+129>: ret
요즘 가디언 문제 좀 풀겠다고 공부는 하는데 진전은 별로 없고...
시스템해킹이 슬슬 바이너리랑 엮이니 어렵다. scanf의 매개변수를 push가 아니라 mov로 주고 있는데 그것도 나에겐 혼동스러워...
일단 %ebp가 현재 스택의 주소이고 %esp는 스택 여유분만큼 빼놓은 주소정도 되는 것 같다
함수 시작할때 push %ebp로 old_ebp addr을 저장하..는게 맞나?
즉 그러니까 자신이 %esp 혹은 %ebp에 대한 어떤 함수의 주소를 알고 있을때 %ebp(스택프레임 끝)까지의 거리+4(old_ebp) 이후의 4 byte가 ret address 인 듯 하다.
'개발 > Algorithm' 카테고리의 다른 글
2개씩 나오는 숫자들 중 하나만 나오는 숫자 찾는 문제 + ⍺ (0) | 2022.07.26 |
---|---|
Persistent Data Structure (0) | 2022.02.28 |
알고리즘 관련 학습 사항 정리 (0) | 2017.04.27 |
난이도 자동 추정 알고리즘에 대하여 (1) | 2015.12.07 |
리듬게임 파일(BMS)의 처리 방법에 대하여 (9) | 2013.08.29 |