2014-10-11 68 views
0

我正在嘗試在當前進程中注入一個dll以查找不同函數的偏移量。DLL中獲取函數PTR

我有我的DLL中一個簡單的功能,看起來像這樣:

void testfunction() 

和IM試圖獲得通過C#應用程序的功能PTR。

public IntPtr GetFunctionPointer() 
    { 
     IntPtr hLoaded = LoadLibrary("C:\\test\\test.dll"); 
     IntPtr functionPtr = GetProcAddress(hLoaded, "testfunction"); 


     return functionPtr; 
    } 

函數ptr每次返回0,即使該函數存在於dll中。 任何幫助,將不勝感激。

+1

難道是出口? – 2014-10-11 03:02:34

+0

你的意思是__declspec(dllexport)void testfunction()? – 2014-10-11 03:06:09

+0

那麼,那會導出一個錯誤名稱的函數。在您的DLL上使用'dumpbin/exports'來查看實際名稱。要使導出的名稱的控制(防止重整),你需要使用一個模塊定義文件。 – 2014-10-11 03:11:32

回答

0

函數沒有被命名爲您的DLL的導出表testfunction,已經錯位與類型信息。所以GetProcAddress不會找到它。 (P/invoke DllImportAttribute嘗試了一大堆名字,可能會發現它......但是GetProcAddress需要完全匹配。)

爲了導出一個沒有任何變形的函數,你需要減少變形函數名稱使用extern "C",然後還使用模塊定義文件進行鏈接。喜歡的東西:

LIBRARY test 
EXPORTS 
testfunction 

有關完整的信息,請參閱the MSDN documentation

+0

我的人,謝謝你的信息。 – 2014-10-11 03:21:15