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

 WASM Phorum —› WASM.RESEARCH —› Меняется ESP при call ?

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


Дата: Янв 8, 2004 16:29:20

Извиняюсь за может быть детский вопрос
но обратится больше не к кому.
трассирую прогу в VC++7

1)
>00411A25 push 5
00411A27 push 4
00411A29 call f (4110AFh)

[EIP = 00411A25 ESP = 0012FDF8 EBP = 0012FEDC]

2)
00411A25 push 5
>00411A27 push 4
00411A29 call f (4110AFh)

[EIP = 00411A27 ESP = 0012FDF4 EBP = 0012FEDC]

3)
00411A25 push 5
00411A27 push 4
>00411A29 call f (4110AFh)
[EIP = 00411A29 ESP = 0012FDF0 EBP = 0012FEDC]

4)попадаю сюда
@ILT+170(?f@@YAHHH@Z):
>004110AF jmp f (411A60h)

[EIP = 004110AF ESP = 0012FDEC EBP = 0012FEDC]
ESP изменился ? кто его поменял ?
Или я тупой или чего то не догоняю. Ну дальше все понятно
прыгаем в функцию

5)
>00411A60 push ebp
00411A61 mov ebp,esp

[EIP = 00411A60 ESP = 0012FDEC EBP = 0012FEDC]



Не могу понять почему call изменил указатель стека??
Ведь call это аналог обычного jmp ?
Пытался посмотреть под SoftICE он он при запуске этой не останавливается почему ..может из за того что VC7 ??
на что можно поставить брейкпоинты чтобы он остановился
(желательно поближе к _tmain())

Опс стукнуло при написании этих строк догадка!Может в стек пишется
адрес возрата для выхода из функции ? Но где она пишется внутри call ?? то есть call это что то типа
push EIP
jmp туды ?
Вопрос о софт айсе остался по прежнему без догадок. Как его заразу заставить нормальну продебагить эту прогу. На gui windows он всплывает как миленький тут же сволочь
проглатывает и не давится..

С Уважением Дмитрий.


Дата: Янв 8, 2004 16:47:56

Dim
Dim
"Инструкция CALL типа near помещает в стек значение регистра IP(смещение следующей инструкции), после этого он помещает в IP смещение первой иструкции вызываемой процедуры."
CALL типа far - то же самое тока еще и CS сохраняет. Сначала CS, потом IP.
Тип CALL - в зависимости от того как объявленна вызываемая процедура.
(Так у Абеля написанно)

>то есть call это что то типа
>push EIP
>jmp туды ?

Похоже на правду. =)


Дата: Янв 8, 2004 17:03:45

Спасибо !
а в нашем случае так как
мы в win32 все вызовы сall по умолчанию near
то есть в стек пишется тока EIP ?
(В принципе думаю наверное да, ведь в win32 весь исполняемый код находиться в одном сегменте от 0 до 4гиг, как впрочем и данные, селекторы для кода и данных разные это да а диапазоны одни)
Осталось тока с SоftICe понять ..
Дмитрий.


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