
Extremely Active Member
     
Group: Admins
Posts: 2301
Member No.: 160
Joined: 22-June 04

|
"вход" и "выход" добавляются не вызовам "call" и "invoke", а самим процедурам. это "фрейм" процедуры, он создается для доступа к параметрам и локальным переменным процедуры, находящимся в стеке, относительно ebp. если используется stdcall, то вызываемая процедура должна их удалять. судя по "ret 4" процедура имеет по крайней мере один параметр. может быть, если у процедуры не будет параметров и локальных переменных, фрейм не добавится. есть еще и другие способы вызова, о них можно узнать, почитав calling conventions.
Возможно, у МАСМа есть какие-то опции, но процедуры можно писать и без обрамления в "proc/endp", а к параметрам обращаться относительно esp, однако здесь нужно следить за состоянием esp, который меняется после каждого push/pop:
| CODE | my_proc: ... mov eax,[esp+n*4]; n - номер параметра, начиная с единицы ... ret (n*4); n - число параметров в стеке |
конечно же, такая процедура не появится в списке процедур в WinAsm Studio.
|