· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.UNIX —› Статья "Ассемблер в Unix": выравнивание стека

Посл.отвђт Сообщенiе


Дата: Окт 27, 2004 15:32:11

В статье (_http://wasm.ru/article.php?article=asminunix)
есть вот такой кусок (пример вызова сист. функции в FreeBSD):
sys_call:

             int  0x80

             ret

       start:

         push msg_len   ; размер строки

         push msg       ; адрес строки

         push 1         ; stdout

         mov  eax,4     ; номер системной функции - sys_write 

         call sys_call

          add  esp,4*3   ; очищаем за собой стек 


Впрочем, от функции sys_call можно отказаться, достаточно просто помещать в стек лишний dword:
start:

              push msg_len   ; размер строки

              push msg       ; адрес строки

              push 1         ; stdout             

              mov  eax,4     ; номер системной функции - sys_write 

              push eax       ; все что угодно   

              int  0x80

            add  esp,4*3   ; очищаем за собой стек 


Вопрос: во втором случае мы пушим в стек 4 дворда (пусть даже один из них не используемый), почему тогда к esp прибавляется 4*3, а не 4*4 ?


Дата: Окт 28, 2004 12:00:33

А все таки нада прибавлять 4*4,
иначе ранее запушенные значения не восстанавливаются.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.039