2011-05-22 84 views
3

我需要劫持我自己的進程的所有操作系統調用。我不能重寫代碼,因爲它部分不是我的代碼(插件)。如果我想調用原始實現,我需要能夠在特定系統調用的實現中決定。如何掛鉤我自己的進程的所有操作系統調用?

操作系統將在第一個Windows XP和更高版本。稍後os x 10.5及更高版本將隨後發佈。從具有32位版本的Windows開始,後來適用於所有操作系統也是64位版本。

我發現了很多關於鉤住其他進程的文檔和工具,但是我希望我的工作更簡單,我希望能有一些源代碼。

非常感謝Bernd。

+0

坦率地說,*所有*系統調用是一個許多。最好的做法可能是編寫一個可加載的內核模塊,在該模塊中你可以訪問每一個系統調用。在我看來,只涉及與您的問題相關的系統調用的方法將是一個更明智的舉措。 – 0xC0000022L 2011-05-22 21:39:36

回答

1

有很多掛鉤庫可以讓你做到這一點,例如Windows上的Detours或madCodeHook。毫無疑問,OSX上有類似的庫,我只是不知道它們!

鉤住一個例程並用你自己的實現代替它是很容易的。在某些情況下保留運行原始例程的選項並不那麼容易,這就是使用鉤子庫會爲您帶來痛苦的地方。

+0

當選擇掛鉤庫或自己實現一個庫時,請確保它是線程安全的! – Grim 2011-05-23 12:53:28

+0

謝謝。起初我想,呃,我知道這些圖書館。但實際上你的回答激勵我重新思考,現在我看到了一種實際使用這些庫的方法。所以,非常感謝。 – 2011-05-24 23:06:08