
08.11.2006, 18:22
|
|
Постоянный
Регистрация: 23.04.2006
Сообщений: 622
Провел на форуме: 5887054
Репутация:
1292
|
|
Ты знаешь, я не знаю откуда ты взял эти значения и темболее не понимяю, как ты помещаешь разницу константы и esp обратно в константу.
Код:
0x08048597 <return_input+3>: sub $0x28,%esp
но наверно ты имеешь ввиду этот фрагмент
Код:
004012D4 >/$ 55 PUSH EBP
004012D5 |. 89E5 MOV EBP, ESP
004012D7 |. 83EC 20 SUB ESP, 20
004012DA |. 57 PUSH EDI
004012DB |. 8D7D E2 LEA EDI, DWORD PTR [EBP-1E]
004012DE |. 57 PUSH EDI ; /s
004012DF |. E8 145F0000 CALL xxx._gets ; \_gets
004012E4 |. 83C4 04 ADD ESP, 4
004012E7 |. 8D7D E2 LEA EDI, DWORD PTR [EBP-1E]
004012EA |. 57 PUSH EDI ; /<%s>
004012EB |. 68 A0A04000 PUSH xxx.0040A0A0 ; |format = "%s",LF,""
004012F0 |. E8 A75C0000 CALL xxx._printf ; \_printf
004012F5 |. 83C4 08 ADD ESP, 8
004012F8 |. 5F POP EDI
004012F9 |. C9 LEAVE
004012FA \. C3 RET
в стек помещаются значения кратные 4, так что 30 округляется вперёд до 32(0x20), а вот потерянные 4 байта это какраз ebp, сохранённые в начале функции, которые в свою очередь убераются инструкцией LEAVE.
|
|
|