Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Assembler

Страница: 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 и она нет чистит за собой стек - эта ответственность ложится на вызывающую функцию. таперь смотрите ее вызов:

  1. ...
  2. push eax ;запихнули в стек последний параметр (4 байта)
  3. push offset string "\xf1\xf3\xec\xec\xe0=%d" (41573Ch) ;запихнули в стек адрес (или смещение) строки (4 байта)
  4. ...


Теперь параметры для printf в стеке. Теперь вызываем ее:

  1. call dword ptr [__imp__printf (4182C0h)]


После возврата из функции мы в стеке имеем все те же параметры. Поэтому и прибавляется 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-сайт: hw.t-k.ru
 Профиль | | #4
Добавлено: 23.02.10 10:09
в примерах есть сэмпл как эту функцию вызвать. или любую другу cdecl функцию. Далеко ходить не надо http://vbnet.ru/samples/download.aspx?id=620

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам