偶爾碰到了乙個小需求,要驗證乙個執行緒起始於某個模組,可以限制對**的執行,起始於特定的執行緒。
執行緒的起始位址startaddress,儲存在了 _ethread 結構中,無法從ring3獲取。
kd> dt _ethread 80553740
ntdll!_ethread
+0x000 tcb : _kthread
+0x1c0 createtime : _large_integer 0x0
+0x1c0 nestedfaultcount : 0y00
+0x1c0 apcneeded : 0y0
+0x1c8 exittime : _large_integer 0x0
+0x1c8 lpcreplychain : _list_entry [ 0x0 - 0x0 ]
+0x1c8 keyedwaitchain : _list_entry [ 0x0 - 0x0 ]
+0x1d0 exitstatus : 0
+0x1d0 ofschain : (null)
+0x1d4 postblocklist : _list_entry [ 0x0 - 0x0 ]
+0x1dc terminationport : (null)
+0x1dc reaperlink : (null)
+0x1dc keyedwaitvalue : (null)
+0x1e0 activetimerlistlock : 0
+0x1e4 activetimerlisthead : _list_entry [ 0x0 - 0x0 ]
+0x1ec cid : _client_id
+0x1f4 lpcreplysemaphore : _ksemaphore
+0x1f4 keyedwaitsemaphore : _ksemaphore
+0x208 lpcreplymessage : (null)
+0x208 lpcwaitingonport : (null)
+0x20c impersonationinfo : (null)
+0x210 irplist : _list_entry [ 0x0 - 0x0 ]
+0x218 toplevelirp : 0
+0x21c devicetoverify : (null)
+0x220 threadsprocess : (null)
+0x224 startaddress : (null)
+0x228 win32startaddress : (null)
+0x22c ......
......
有乙個native的函式,可以獲取到執行緒的其實位址。該native函式是 ntqueryinformationthread,第二個引數設定為threadquerysetwin32startaddress,即可獲取執行緒的起始位址。
dword winapi getthreadstartaddress(handle hthread)
ntstatus = ntqueryinformationthread(hduphandle, threadquerysetwin32startaddress, &dwstartaddress, sizeof(dword), null);
closehandle(hduphandle);
if(ntstatus != status_success) return 0;
return dwstartaddress;
}
windows中的多執行緒
建立新的執行緒的api函式是createthread hthread createthread security attributes,dwstacksize,threadproc,pparam,dwflags,idthread threadproc函式名 第乙個引數是指向security attr...
Qt 多執行緒中地訊號與槽
qt 多執行緒中地訊號與槽 函式原型 1 qobject connect const qobject sender,const char signal,const qobject receiver,const char method,qt connectiontype type qt autocon...
Windows中多執行緒的同步
windows程序間同步方式有 1.互斥量 mutex 2.訊號量 semaphore 3.事件 event 4.臨界區 critical section 5.互鎖函式 臨界區和互鎖函式沒有相應的核心物件因而不能跨程序 只能同步同乙個程序的執行緒之間的同步,因為臨界區不能跨越程序的邊界工作。也是因為...