獲取核心物件的引用計數

2021-06-12 12:59:31 字數 908 閱讀 6529

正規的方法可以用 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,事實上 就是引用計數。

物件引用 計數 原理

includeusing namespace std 主要思想,cptrint相當於管理int 的智慧型指標,能控制複製中記憶體懸掛等問題。該物件內部有乙個cptrcount類,該類負責記錄拷貝的次數,儲存共享記憶體的指標。該類的拷貝構造負責,拷貝複製其資料 引用次數 共享記憶體指標。不負責處理引用...

自動引用計數

每當你產生乙個物件,arc分配一大塊控制項去儲存這個物件。除此之外,當乙個物件是不在需要,arc 將會收回這個例項物件所佔的空間。如果乙個物件的空間被釋放掉,但是你任然通過物件的引用呼叫方法或者屬性,你的程式將要崩潰。為了不讓物件被釋放掉 arc將會追蹤有多少屬性 常量 變數正在引用這個物件。只要有...

引用計數 copy on write

拷貝通常分為值拷貝也叫淺拷貝和深拷貝,當拷貝方式為淺拷貝時就會有以下兩個問題 1 當需要調析構函式時,會出現同一塊空間被析構兩次的情況 2 如果是對指標的淺拷貝,會讓兩個指標同時管理同一塊空間,當乙個指針對這塊空間進行修改時,會影響到另外乙個指標。通過引用計數加寫時拷貝可以有效地解決這些問題。引用計...