首页
论坛
课程
招聘
[求助]请教调用Dll的非导出函数方法,谢谢
2010-2-1 19:54 6169

[求助]请教调用Dll的非导出函数方法,谢谢

2010-2-1 19:54
6169
收藏
点赞0
打赏
分享
最新回复 (9)
雪    币: 409
活跃值: 活跃值 (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
resty 活跃值 2 2010-2-1 20:34
2
0
它没有导出的话你就需要想办法得到它的地址了。
用dll的基址+函数入口的偏移应该是比较方便的方法
雪    币: 202
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
newkey 活跃值 2010-2-2 12:41
3
0
知道函数地址和参数
不知道怎么调用
感谢指点
雪    币: 67
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
linzehao 活跃值 2010-2-2 13:15
4
0
参考API  CallProAddress
雪    币: 202
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
newkey 活跃值 2010-2-2 20:16
5
0
GetProcAddress是要求Dll函数导出的
------------------------------------------------------------------------------------------------
显式链接到 DLL 的进程调用 GetProcAddress 来获取 DLL 导出函数的地址。使用返回的函数指针调用 DLL 函数。GetProcAddress 将(由 LoadLibrary、AfxLoadLibrary 或 GetModuleHandle 返回的)DLL 模块句柄和要调用的函数名或函数的导出序号用作参数。
雪    币: 315
活跃值: 活跃值 (22)
能力值: (RANK:350 )
在线值:
发帖
回帖
粉丝
stalker 活跃值 8 2010-2-2 21:59
6
0
知道了还不能直接call吗?
雪    币: 67
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
linzehao 活跃值 2010-2-3 12:22
7
0
push 0
push 0
push 0
call 123456789
雪    币: 202
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
newkey 活跃值 2010-2-3 12:53
8
0
ok
明白了

asm
{
  push xxx
  push xxx
  call  yyy
}

我是想问是否有c/C++的写法
雪    币: 198
活跃值: 活跃值 (180)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
lwykj 活跃值 2010-2-3 14:18
9
0
申明 函数指针类型
把 yyy定义成 对应的函数指针, 就可以了
雪    币: 218
活跃值: 活跃值 (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Phonax 活跃值 2010-5-15 20:54
10
0
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 函数调用之后用什么非内联汇编语句或者约定编译指令进行堆栈平衡?
游客
登录 | 注册 方可回帖
返回