Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm: Общие вопросы > Критическая секция


Автор: zss 18.8.2004, 09:43
Как можно организовать критическую секцию ?

к примеру в отладчике SoftIce это выглядит так

KeEnterCriticalRegion
Код

mov  eax, fs:[0x00000124]
dec  dword ptr [eax + 0x000000D4]
ret


KeLeaveCriticalRegion
Код

mov  eax, fs:[0x00000124]
inc  dword ptr [eax + 0x000000D4]
jnz  _Ret
lea  ecx, [eax + 0x34]
cmp  [ecx], ecx
jnz  RtlNumberOfClearBits + 0x08C5
ret



Автор: oleg1973 18.8.2004, 15:42
Цитата
Как можно организовать критическую секцию ?

а что ты под этим понимаеш?
видимо имеется ввиду SEH переделать?smile.gif

Автор: zss 18.8.2004, 20:41
Цитата(oleg1973 @ 18.8.2004, 15:42)
а что ты под этим понимаеш?

Я имею ввиду создание некоего механизма синхронизации без использования вызовов NativeAPI, а чисто по адресам (если это правда возможно)

Автор: Chingachguk 19.8.2004, 01:37
Если это в драйвере, то чем не подходит cli/sti ? Или вручную исправить [eax+D4] ?

Автор: zss 19.8.2004, 10:44
Цитата(Chingachguk @ 19.8.2004, 01:37)
Если это в драйвере, то чем не подходит cli/sti ? Или вручную исправить [eax+D4] ?

а запрет прерываний cli/sti - гарантирует монопольность доступа ?

Автор: Chingachguk 20.8.2004, 00:36
Если драйвер в ring0, то должно быть так - свойство проца. Интересно ведут себя они в ring3, но я не проверял точно.

Автор: zss 20.8.2004, 08:22
а пойдет ли этот код на многопроцессорной машине (и вообще - какие у него ограничения по сравнению со стандартными объектами синхронизации)

Автор: Chingachguk 21.8.2004, 19:15
Это тонкий вопрос. Где-то на bugtraq.ru или wasm.ru я видел его обсуждение. В документации везде написано, что cli на нулевом уровне привилегий полностью блокирует выполняющийся код от всех внешних прерываний кроме NMI, но и его можно блокировать.

Может, уточнишь задачу ? Возможно, есть и другие решения...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)