Показать сообщение отдельно

  #13  
Старый 08.11.2006, 18:22
hidden
Постоянный
Регистрация: 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.
 
Ответить с цитированием