只有DLL,没有头文件该如何调用这个DLL

hi9527 2006-05-15 12:05:19
一个比较简单的DLL, 但没有头文件和函数说明, 该如何调用它?如何获得函数的参数类型和返回值?

...全文
2233 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
woodwoodwood3 2007-02-28
  • 打赏
  • 举报
回复
使用反汇编工具可以得出函数参数。如果你搞过反汇编就可以知道方法了。参考工具IDA
ppx3200 2007-02-28
  • 打赏
  • 举报
回复
LZ不知道分析该DLL的PE格式是否可行?没时间测试。
blueoceanli 2007-02-27
  • 打赏
  • 举报
回复
如果没有,就不要用了,浪费时间
claider 2007-02-13
  • 打赏
  • 举报
回复
bcb好像带了个工具可以根据dll生成lib的
ToperRay 2007-02-12
  • 打赏
  • 举报
回复
至少要知道函数得某些功能啊
rickerliang 2007-02-12
  • 打赏
  • 举报
回复
是mfc扩展dll么
linuxpgy 2007-02-12
  • 打赏
  • 举报
回复
如何这个dll是debug版的也许可以,嘿嘿,release版就不要想了
双杯献酒 2007-02-07
  • 打赏
  • 举报
回复
没有简单方法可以得到参数和返回值
luoxiangdong 2007-02-07
  • 打赏
  • 举报
回复
楼主,你放弃吧

即使你解析出了机器码,也不能正常使用!

任何一个指针,和一个int类型的参数,机器码是一样的.
如果你看到一个32bit的数字,你怎么知道是一个int数字,还是一个指向结构体的指针?
Atomictry 2006-05-29
  • 打赏
  • 举报
回复
可以猜测它的参数类型,如果类型错了,你调用的程序会出错,希望这个dll导出函数不要太多。
pripor 2006-05-28
  • 打赏
  • 举报
回复
如果dll不是很复杂的话
depends查看函数
用逆向工具通过汇编得到参数与返回值
最后自己写一个头文件
youngwolf 2006-05-28
  • 打赏
  • 举报
回复
没有函数具体的签名,即头文件,要想使用,只要分析机器语言了,也就是说几乎不能用了。不过你可以根据函数的名字、功能去猜测函数的签名,但这没有从根本上解决问题。
mynamelj 2006-05-28
  • 打赏
  • 举报
回复
最起码你要知道这个函数是干什么用的吧.
kugou123 2006-05-28
  • 打赏
  • 举报
回复
要知道参数和返回值类型。不然不好办
hi9527 2006-05-27
  • 打赏
  • 举报
回复
有什么简单的方法能自己获得DLL的函数的参数个数和类型吗? 不知道上哪去找作者要资料,只能自己分析
lixiaosan 2006-05-15
  • 打赏
  • 举报
回复
用depends工具看看
mynamelj 2006-05-15
  • 打赏
  • 举报
回复
还有一种调用方法就是通过函数指针来调用DLL中的函数,不过也需要知道函数原型

// A simple program that uses LoadLibrary and
// GetProcAddress to access myPuts from Myputs.dll.

#include <stdio.h>
#include <windows.h>

//申明函数指针
typedef int (__stdcall *MYPROC)(LPTSTR);

VOID main(VOID)
{
HINSTANCE hinstLib;
MYPROC ProcAdd;
BOOL fFreeResult, fRunTimeLinkSuccess = FALSE;

// 得DLL模组句柄
hinstLib = LoadLibrary(TEXT("myputs.dll"));

// If the handle is valid, try to get the function address.
if (hinstLib != NULL)
{
ProcAdd = (MYPROC) GetProcAddress(hinstLib, TEXT("myPuts"));

// If the function address is valid, call the function.
if (NULL != ProcAdd)
{
fRunTimeLinkSuccess = TRUE;
(ProcAdd) (TEXT("Message via DLL function\n"));
}

// Free the DLL module.
fFreeResult = FreeLibrary(hinstLib);
}

// If unable to call the DLL function, use an alternative.

if (! fRunTimeLinkSuccess)
printf("Message via alternative method\n");
}
wangk 2006-05-15
  • 打赏
  • 举报
回复
depends 或者 win32dasm 不能获取参数类型和返回值类型,必须DLL作者告诉你,或则自己分析调用该DLL的函数的代码。
hi9527 2006-05-15
  • 打赏
  • 举报
回复
depends 或者 win32dasm 能获取参数类型和返回值类型吗?获取函数名倒是简单
「已注销」 2006-05-15
  • 打赏
  • 举报
回复
win32dasm

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧