获取内核对象的引用计数
2013-01-31 11:26
267 查看
正规的方法可以用 ZwQueryObject 。但是该函数用起来比较麻烦。
事实上还有一个方便的函数
VOID ObReferenceObject(
_In_ PVOID Object
);
Return value
ObReferenceObject returns a value that is reserved for system use. Drivers must treat this value as VOID.
打开反汇编一看:
nt!ObfReferenceObject:
8086bf7c 803de0088a8000 cmp byte ptr [nt!KiEnableTimerWatchdog+0xafc (808a08e0)],0
8086bf83 56 push esi
8086bf84 8d71e8 lea esi,[ecx-18h]
8086bf87 7408 je nt!ObfReferenceObject+0x15 (8086bf91)
8086bf89 6a01 push 1
8086bf8b 56 push esi
8086bf8c e8a3feffff call nt!NtFreeVirtualMemory+0x14ea2 (8086be34)
8086bf91 33c0 xor eax,eax
8086bf93 40 inc eax
8086bf94 f00fc106 lock xadd dword ptr [esi],eax
8086bf98 40 inc eax
8086bf99 5e pop esi
8086bf9a c3 ret //eax = new reference count
虽然该函数的返回值声明为void,事实上 就是引用计数。
事实上还有一个方便的函数
VOID ObReferenceObject(
_In_ PVOID Object
);
Return value
ObReferenceObject returns a value that is reserved for system use. Drivers must treat this value as VOID.
打开反汇编一看:
nt!ObfReferenceObject:
8086bf7c 803de0088a8000 cmp byte ptr [nt!KiEnableTimerWatchdog+0xafc (808a08e0)],0
8086bf83 56 push esi
8086bf84 8d71e8 lea esi,[ecx-18h]
8086bf87 7408 je nt!ObfReferenceObject+0x15 (8086bf91)
8086bf89 6a01 push 1
8086bf8b 56 push esi
8086bf8c e8a3feffff call nt!NtFreeVirtualMemory+0x14ea2 (8086be34)
8086bf91 33c0 xor eax,eax
8086bf93 40 inc eax
8086bf94 f00fc106 lock xadd dword ptr [esi],eax
8086bf98 40 inc eax
8086bf99 5e pop esi
8086bf9a c3 ret //eax = new reference count
虽然该函数的返回值声明为void,事实上 就是引用计数。
相关文章推荐
- 线程、进程内核对象引用计数问题
- 为什么CreateThread()调用创建线程时,系统设置线程内核对象的引用计数为1,在Create函数返回前是2
- Object 获取对象的引用计数(retain count)
- 线程、进程内核对象引用计数问题
- QPointer,QSharedPointer,QWeakPointer的区别与使用例子(QSharedPointer类似Delphi里的引用计数,是强引用,而QWeakPointer是弱引用,不影响原始对象的引用计数,相当于是在暗中观察对象,但保持联系,需要的时候就会出现)
- 读 Runtime 源码:对象与引用计数
- Python 对象的引用计数和拷贝
- OC对象与CF对象的相互转换 和 ARC下查看OC对象的引用计数
- python笔记(五) - 获取对象的引用
- Python通过getattr获取对象引用
- 引用计数的cocos2dx对象内存管理和直接new/delete box2d对象内存管理冲突的解决方法
- LINUS:为何对象引用计数必须是原子的
- 使用 引用计数 来跟踪访问共享对象的对象数量
- bookone这个书籍对象被我release掉了,此时引用计数为0,为毛还能调用
- iOS内存管理系列之一:对象所有权与引用计数
- 【Netty官方文档翻译】引用计数对象(reference counted objects)
- linux-2.6内核模块引用计数的实现(try_module_get和module_put)
- 通过给事件处理程序传递this参数,获取事件源对象的引用。单机提交按钮时在信息框中显示用户输入的字符。
- 如何用WaitForMultipleObjects获取所有被同时触发的内核对象
- C++简单实现对象引用计数示例(转)