информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Сетевые кракеры и правда о деле ЛевинаЗа кого нас держат?Портрет посетителя
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Microsoft Authenticator прекращает... 
 Очередное исследование 19 миллиардов... 
 Оптимизация ввода-вывода как инструмент... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
если вы видите этот текст, отключите в настройках форума использование JavaScript
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
вопрос про соглашение __stdcall 22.10.01 04:18  Число просмотров: 932
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
и правда логично было бы если функция вообще не меняла регистры (сохраняла, а потом восстанавливала)

наверно у меня просто компилятор оптимизировал код
он же знает какие регистры используются в вызывающей функции
скорее всего так и есть

если у кого появятся ещё какие соображения - пишите - интересно узнать
<programming>
вопрос про соглашение __stdcall 22.10.01 03:27  
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
какие регистры должны сохраняться ?

опытным путём получено, что достаточно восстанавливать esp и ebp
(достаточно что бы не глючило)

но при обычном вызове, который генерит VC60, так же сохраняются ebx, esi, edi
правда не уверен, что всегда

может кто знает как ДОЛЖНО быть ?
вопрос про соглашение __stdcall 22.10.01 04:07  
Автор: Heromantor Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> какие регистры должны сохраняться ?
>
> опытным путём получено, что достаточно восстанавливать esp
> и ebp
> (достаточно что бы не глючило)
>
> но при обычном вызове, который генерит VC60, так же
> сохраняются ebx, esi, edi
> правда не уверен, что всегда
>
> может кто знает как ДОЛЖНО быть ?

StdCall Indicates that the __stdcall calling convention should be used for a method. The __stdcall calling convention is used to call Win32 API functions. Because the callee cleans the stack, the compiler changes the calling convention of vararg functions to __cdecl. Functions that use this calling convention require a function prototype.

А почему он сохраняет только 3 регистра? По-моему соглашения не должны влиять на общие регистры почему тогда он не сохраняет все регистры?
вопрос про соглашение __stdcall 22.10.01 04:18  
Автор: ggg <ggg> Статус: Elderman
<"чистая" ссылка>
и правда логично было бы если функция вообще не меняла регистры (сохраняла, а потом восстанавливала)

наверно у меня просто компилятор оптимизировал код
он же знает какие регистры используются в вызывающей функции
скорее всего так и есть

если у кого появятся ещё какие соображения - пишите - интересно узнать
вопрос про соглашение __stdcall 22.10.01 06:41  
Автор: NeuronViking Статус: Незарегистрированный пользователь
<"чистая" ссылка>

Конвенция передачи параметров(stdcall, cdecl, thiscall, fastcall, ... ) определяет ТОЛЬКО способ передачи параметров функции и ни чего более.
Сохранение/воостановление специфичных регистров зависит от конкретной ОС(хотя возможно еще и от компиллера какие-то дополнительные), эти регистры сохраняются для корректной работы кода под конкретной ОС. Так, например, в Windows(R) НЕЛЬЗЯ изменять(т.е. нужно сохранять значения) следующих регистров: ESI, EDI, EBX(особенно это относится к DLL), в зависимости от компилера и от настроек компилляции необходимо также сохранять регистр EDX. При выполнении этих условий программы будут работать корректно.
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2025 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach