能力值:
( LV6,RANK:90 )
|
-
-
2 楼
它没有导出的话你就需要想办法得到它的地址了。
用dll的基址+函数入口的偏移应该是比较方便的方法
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
知道函数地址和参数
不知道怎么调用
感谢指点
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
参考API CallProAddress
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
GetProcAddress是要求Dll函数导出的
------------------------------------------------------------------------------------------------
显式链接到 DLL 的进程调用 GetProcAddress 来获取 DLL 导出函数的地址。使用返回的函数指针调用 DLL 函数。GetProcAddress 将(由 LoadLibrary、AfxLoadLibrary 或 GetModuleHandle 返回的)DLL 模块句柄和要调用的函数名或函数的导出序号用作参数。
|
能力值:
(RANK:350 )
|
-
-
6 楼
知道了还不能直接call吗?
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
push 0
push 0
push 0
call 123456789
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
ok
明白了
asm
{
push xxx
push xxx
call yyy
}
我是想问是否有c/C++的写法
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
申明 函数指针类型
把 yyy定义成 对应的函数指针, 就可以了
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
typedef UINT (CALLBACK* LPFNDLLFUNC1)(DWORD,UINT);
.
.
.
HINSTANCE hDLL; // Handle to DLL
LPFNDLLFUNC1 lpfnDllFunc1; // Function pointer
DWORD dwParam1;
UINT uParam2, uReturnVal;
hDLL = LoadLibrary("MyDLL");
if (hDLL != NULL)
{
lpfnDllFunc1 = (LPFNDLLFUNC1)GetProcAddress(hDLL,
"DLLFunc1");
if (!lpfnDllFunc1)
{
// handle the error
FreeLibrary(hDLL);
return SOME_ERROR_CODE;
}
else
{
// call the function
uReturnVal = lpfnDllFunc1(dwParam1, uParam2);
}
}
MSDN 中关于 GetProcAddress 的示例,可参考其中函数指针的写法(此例不是为了说明如何获取DLL导出函数的地址,而是说明如何定义函数指针以C/C++方式编码)。
另外,新手有一点不太明白,如果需要,在 lpfnDllFunc1 函数调用之后用什么非内联汇编语句或者约定编译指令进行堆栈平衡?
|
|
|