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