|
|
| Посл.отвђт | Сообщен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 |