高分求教!!如何知道一个EXE文件对某DLL函数的调用情况?即函数名,参数

老顽童 2003-11-24 07:08:32
如何知道一个EXE文件对某DLL函数的调用情况?即函数名,参数
...全文
106 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
老顽童 2003-11-30
  • 打赏
  • 举报
回复
哎,还是说声谢谢
smalltalk 2003-11-25
  • 打赏
  • 举报
回复
#include <windows.h>
#include <tlhelp32.h>

BOOL GetProcessModule (DWORD dwPID, DWORD dwModuleID,
LPMODULEENTRY32 lpMe32, DWORD cbMe32)
{
BOOL bRet = FALSE;
BOOL bFound = FALSE;
HANDLE hModuleSnap = NULL;
MODULEENTRY32 me32 = {0};

// Take a snapshot of all modules in the specified process.

hModuleSnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, dwPID);
if (hModuleSnap == INVALID_HANDLE_VALUE)
return (FALSE);

// Fill the size of the structure before using it.

me32.dwSize = sizeof(MODULEENTRY32);

// Walk the module list of the process, and find the module of
// interest. Then copy the information to the buffer pointed
// to by lpMe32 so that it can be returned to the caller.

if (Module32First(hModuleSnap, &me32))
{
do
{
if (me32.th32ModuleID == dwModuleID)
{
CopyMemory (lpMe32, &me32, cbMe32);
bFound = TRUE;
}
}
while (!bFound && Module32Next(hModuleSnap, &me32));

bRet = bFound; // if this sets bRet to FALSE, dwModuleID
// no longer exists in specified process
}
else
bRet = FALSE; // could not walk module list

// Do not forget to clean up the snapshot object.

CloseHandle (hModuleSnap);

return (bRet);
}

上面的程序可以找出某DLL函数的调用情况.LPMODULEENTRY32 中有DLL的相关信息.但不能详细得到函数的调用情况,如果你要知道这个,就的分析win32的PE文件结构了,好象没有现成的函数。
这里有一篇详细说明PE结构的文章:http://www.pediy.com/tutorial/chap8/Chap8-1-1.htm
你可以研究一下。
ccrun.com 2003-11-25
  • 打赏
  • 举报
回复
从PE文件的文件头中分析导入表,可以知道该EXE调用了哪些Dll中的函数,至于参数,可能要麻烦些。
ljianq 2003-11-25
  • 打赏
  • 举报
回复
大多数调试工具多有这样的功能。
constantine 2003-11-25
  • 打赏
  • 举报
回复
顶!
ccrun.com 2003-11-25
  • 打赏
  • 举报
回复
PE文件格式分析的文章现在满天飞啊。呵呵。图文并茂的很多。
smalltalk 2003-11-25
  • 打赏
  • 举报
回复
我还是要补充:
关于Win32的PE格式,有一个叫Matt Pietrek人是专家,这人在94年就开始提出了分析PE格式的文章,叫:"Peering Inside the PE: A Tour of the Win32 Portable Executable File Format".
2002年,有写了篇新的,其中包括.net和64位下的PE文件格式,叫:"An In-Depth Look into the Win32 Portable Executable File Format"。
这两篇文章在MSDN中都有,各位可以去查看,而且Matt 还给出了程序原码,很有价值。原码可以在这下载:
http://download.microsoft.com/download/msdnmagazine/code/Feb02/WXP/EN-US/PE.exe
我稍微看了以下,比VC6提供的dumpbin.exe工具强.

猛禽 2003-11-25
  • 打赏
  • 举报
回复
用BCB自带的tdump
tdump -em. exename可以取得EXE调用的DLL(静态调用)
tdump -em exename可以取得调用的DLL及其函数名
参数,理论上除非反汇编,否则没其它办法
Friecin 2003-11-25
  • 打赏
  • 举报
回复
严重关注!

smalltalk(老徐) 的方法,我过去也见过但没有尝试,从代码来看,表示怀疑。你到网上找找看,看有没有现成的工具可用。

pp616 2003-11-24
  • 打赏
  • 举报
回复
可以用vs6里的工具Depends
但是参数不清楚。

1,222

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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