熱補丁hook解決多執行緒下inline hook

2022-10-10 14:15:14 字數 506 閱讀 8999

一次面試的問題:inline hook時如何穩定hook多執行緒下的四個位元組的函式?

因為普通inline hook是覆蓋五個位元組長度,所以函式位址長度不夠。

這種情況下可以採用熱補丁hook。

比如隨便進入乙個loadlibrarya函式

可以看到函式前有五個位元組的nop

算上函式第一行的mov edi edi這兩個位元組為七個位元組

這時修改函式開頭的兩個位元組為改為短跳轉指令(eb e9),使其跳到函式上邊五位元組處,然後再將這五個位元組改為長跳轉指令(e9 hook_address)相當於經過了乙個中轉進行hook。

這樣即使hook失敗,也不影響函式的繼續執行,從而在多執行緒下穩定執行。

參考:

windows下C多執行緒

看到乙個簡單的windows程式設計例項,給大家分享一下 這個例項主要用createthread為乙個宣告的方法建立乙個程序,這個被建立的方法必須用dword winapi 修飾,需要有lpvoid 型別的引數,如果沒有這個引數,在建立程序時要對這個方法強制型別中轉換 dword winapi my...

PHP下使用多執行緒

本文以windows為例,講解安裝和使用php pthreads擴充套件。開啟 http localhost phpinfo 1 找到 php extension build 的版本 配置 php.ini 檔案,新增一行 extension php pthreads.dll重啟 apache 並檢視...

Android下的多執行緒

在android下面也有多執行緒的概念,在c c 中,子執行緒可以是乙個函式,一般都是乙個帶有迴圈的函式,來處理某些資料,優先執行緒只是乙個複雜的運算過程,所以可能不需要while迴圈,運算完成,函式結束,執行緒就銷毀。對於那些需要控制的執行緒,一般我們都是和互斥鎖相互關聯,從而來控制線程的進度,一...