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

 WASM Phorum —› WASM.WIN32 —› ObDereferenceObject

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


Дата: Авг 23, 2004 13:33:35

"ObDereferenceObject decrements the given object's reference count and performs retention checks" Так написано в MSDN и у Four-F
    invoke ObDereferenceObject, pProcess

MASM компилирует в
push dword ptr [esi+64h]
call ObDereferenceObject

Но в одном из драйверов нашел другую интерпритацию :)
mov ecx, [esi+64h]
call ds:__imp_@ObfDereferenceObject@4

Во втором случае она рассматривается как fastcall-функция. Вопрос - как правильно вызывать? И как узнать какая ф-ция fastcall или нет? Ведь можно любоваться синим экраном долго Ж:)


Дата: Авг 23, 2004 13:39:52

ObDereferenceObject и ObfDereferenceObject - это разные функции.
VOID FASTCALL ObfDereferenceObject(IN PVOID Object)
и VOID ObDereferenceObject(IN PVOID Object)


Дата: Авг 23, 2004 13:41:38

Разные по передачи параметров, в DDK нет ObfDereferenceObject :(


Дата: Авг 23, 2004 14:07:57

ничего удивительного.
VOID
ObDereferenceObject (
    IN PVOID Object
    )

/*++
Routine Description:
This is really just a thunk for the Obf version of the dereference routine
ююююю


Дата: Авг 23, 2004 15:16:35

invoke ObDereferenceObject, pProcess

или
fastcall ObfDereferenceObject, pProcess


Дата: Авг 23, 2004 15:51:22

А вот и ответ :) IDA показала.
0044F99C                 public ObDereferenceObject
0044F99C ObDereferenceObject proc near
0044F99C 
0044F99C arg_0           = dword ptr  4
0044F99C 
0044F99C                 mov     ecx, [esp+arg_0]
0044F9A0                 call    ObfDereferenceObject
0044F9A5                 retn    4
0044F9A5 ObDereferenceObject endp

ObDereferenceObject - оболочка для ObfDereferenceObject


Дата: Авг 23, 2004 18:37:23

а я что написал - "This is really just a thunk for the Obf version of the dereference routine" - цитата из первоисточника


Дата: Авг 24, 2004 10:34:59

Вот, пока копался в ядре нашёл странную странность - интересный код:
00402340                 public KefAcquireSpinLockAtDpcLevel
00402340 KefAcquireSpinLockAtDpcLevel proc near
00402340                 retn
00402340 KefAcquireSpinLockAtDpcLevel endp
00402340 
00402340 ; ---------------------------------------------------------------------- -----
00402341                 align 4
00402344 ; Exported entry 434. KeAcquireSpinLockAtDpcLevel
00402344 
00402344 ; --------------- S U B R O U T I N E ---------------------------------------
00402344 
00402344 
00402344                 public KeAcquireSpinLockAtDpcLevel
00402344 KeAcquireSpinLockAtDpcLevel proc near
00402344                 retn    4
00402344 KeAcquireSpinLockAtDpcLevel endp

И такого "барахла" много Ж:(
Может эти функции вообще не надо вызывать? Ведь простой ret я и сам могу сделать.


Дата: Авг 24, 2004 11:16:18

Снимаю вопрос :) это для "multiprocessor-safe way" У меня однопроцессорная система.


Дата: Авг 24, 2004 14:38:41

Это как раз для однопроцессорной машины, в ней хватание спинлока это просто повышение IRQL до dispatch. И если мы уже на dispatch, то нет смысла устанавливать этот же самый IRQL ещё раз.


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