Страница: 1 |
Страница: 1 |
Вопрос: ПОМОГИТЕ!!!
Добавлено: 12.11.09 22:13
Автор вопроса: aleksei
Никак не могу понять почему в строке "add esp,8" стоит именно 8, а не 6, не 4, не 3...
00413662 mov esi,esp
00413664 mov eax,dword ptr[summa]
00413667 push eax
00413668 push offset string "\xf1\xf3\xec\xec\xe0=%d" (41573Ch)
0041366D call dword ptr [__imp__printf (4182C0h)]
00413673 add esp,8; вот сдесь
00413676 cmp esi,esp
00413678 call @ILT+325(__RTC_CheckEsp) (41114Ah)
Ответы
Всего ответов: 4
Номер ответа: 1
Автор ответа:
VerhoLom
Вопросов: 20
Ответов: 285
Профиль | | #1
Добавлено: 13.11.09 11:36
printf - функция Сяшная, а не STDCALL и она нет чистит за собой стек - эта ответственность ложится на вызывающую функцию. таперь смотрите ее вызов:
Теперь параметры для printf в стеке. Теперь вызываем ее:
После возврата из функции мы в стеке имеем все те же параметры. Поэтому и прибавляется 8: в стек было помещено 2 4-байтовых параметра. Теперь они удалятся. А 3,6 и т. д. байт в 32-битовом стеке быть не может.
Номер ответа: 2
Автор ответа:
aleksei
Вопросов: 2
Ответов: 2
Профиль | | #2
Добавлено: 13.11.09 19:36
Спасибо, выручил!
Номер ответа: 3
Автор ответа:
Радченко
Вопросов: 1
Ответов: 12
Профиль | | #3
Добавлено: 23.02.10 08:43
Оч сильно тож благодарю.
Номер ответа: 4
Автор ответа:
sne
Разработчик Offline Client
ICQ: 233286456
Вопросов: 34
Ответов: 5445
Web-сайт:
Профиль | | #4
Добавлено: 23.02.10 10:09
в примерах есть сэмпл как эту функцию вызвать. или любую другу cdecl функцию. Далеко ходить не надо http://vbnet.ru/samples/download.aspx?id=620