我正在開發一個項目,以便在LD_PRELOAD程序中注入一個共享庫。注入LD_PRELOAD和線程安全的線程
我的注入庫在注入程序時創建一個新線程。所有的邏輯都發生在這個線程中(如分析網絡流量等)。
首先,您需要了解有關正在預加載的程序的情況。它是一個客戶端應用程序,它將每個數據包加密寫入靜態緩衝區,並將其發送到服務器。我發現了在客戶端加密和發送數據包的功能,我可以繞過它。所以現在我可以修改靜態緩衝區,並讓'send'函數加密緩衝區並將緩衝區發送到服務器。
但現在我有一個問題:如果我改變我的圖書館的線程靜態緩衝區的內容(這樣我就可以發送一個僞造的包),並在同一時間程序的線程更改靜態緩衝區呢?那會導致崩潰。
我需要某種同步。
所以我一直在想一些解決方案:
- 查找改變緩衝,繞路他們和互斥添加到呼叫或類似的東西程序的每個函數。會採取像年齡雖然...
- 找到一種方法來執行我的代碼塊,在一個塊中更改緩衝區。所以我的代碼實際上一次執行,沒有POSIX線程切換到其他線程。這甚至有可能嗎?
- 使我的應用程序同步和哭泣。
任何人都可以想出更好的解決方案嗎?或者你知道如何使解決方案2成爲可能?
由於提前, 吉利斯
Injected線程和主線程都會調用Send函數嗎? – 2012-02-17 00:51:53
是的。可能是他們在同一時間稱呼它。他們完全是獨立的線程。也可能是主線程組成一個數據包(寫入緩衝區),並且被注入的線程也同時組成一個數據包。 – 2012-02-17 10:33:14