2009-07-09 59 views
1

這一場比賽我對做腳本使用主DLL中,我們的腳本我們寫(創造性地命名爲「scripts.dll」在另一個DLL改寫功能,無需編輯主DLL

這scripts.dll,服務器端,加載其他插件(.DLL文件以及)

問:我需要重寫在scripts.dll現有的功能,例如,pluginA.dll到其中一個在scripts.dll不打電話

我有想到可能抓住添加在scripts.dll中使用(memcpy()?)覆蓋我的新函數的地址。

哦,功能被命名爲相同。

回答

1

首先,我會嘗試調整調用者以從pluginA.dll中獲取此特定函數指針,而不是通過GetProcAddress從scripts.dll中獲取此特定函數指針。

如果這樣做不可行,我會用新指令的跳轉指令覆蓋舊函數的開始。 x86上的跳轉指令是「E9 XX XX XX XX」;請注意,跳轉後目標地址與PC相關。如果您沒有x86,那麼機器代碼當然會有所不同。

2

這是一個相當大的話題,需要一個冗長的回答,但是,謝天謝地,它已經在其他地方詳細介紹過了。 This CodeProject article是一個相當不錯的閱讀主題 - 它解釋了理論,以及如何使用方便的Microsoft Detours庫很容易做到這一點。

+0

謝謝,這應該對我有幫助。 :) – Zack 2009-07-09 21:38:34