Windows中獲取執行緒起始位址

2021-07-11 19:25:45 字數 1893 閱讀 8352

偶爾碰到了乙個小需求,要驗證乙個執行緒起始於某個模組,可以限制對**的執行,起始於特定的執行緒。

執行緒的起始位址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.互鎖函式 臨界區和互鎖函式沒有相應的核心物件因而不能跨程序 只能同步同乙個程序的執行緒之間的同步,因為臨界區不能跨越程序的邊界工作。也是因為...