информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Spanning Tree Protocol: недокументированное применениеПортрет посетителяАтака на Internet
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 ФБР нашла русский след в атаках... 
 Массовый взлом SharePoint 
 Microsoft Authenticator прекращает... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
вопрос про соглашение __stdcall 22.10.01 04:18  Число просмотров: 954
Автор: 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