怎样显示Exe和DLL调用了那些API函数?????????????(100分)

  • 主题发起人 主题发起人 anydelphi
  • 开始时间 开始时间
呵呵,关注呀!!!!!!!!!!有空我帮你调试一下
 
方法1 命令行方式 Dump 可以查看EXE、DLL内容,编程时可以
CreatePipe(hReadPipe, hWritePipe, hReadPipe, 1024);
CreateProcess(nil, CmdLine, nil, nil, True, NORMAL_PRIORITY_CLASS, nil, nil, SI, PI)
对命令行进行读写。
方法2
hProcess := OpenProcess(PROCESS_QUERY_INFORMATION OR PROCESS_VM_READ, FALSE, StrtoInt(ListView2.Selected.SubItems.Strings[0]));
Res := EnumProcessModules(hProcess, Buffer, SizeOf(Buffer),cbNeeded);
GetModuleBaseName(hProcess,buffer,szModName,SizeOf(szModName));
可以得到正在运行的PROCESS的相关调用模块
 
to NowCan
在你的网页上面没有看到你的C语言程序啦!!!!???????
看来只好修改自己的程序了!
 
http://vip.6to23.com/NowCan1/tech/pe.htm
 
上面的程序改为:
只是得到输出的函数而已

//显示DLL文件调用的API函数
procedure ListDLLAPI(FileName:string);
type
PDWordArray=^TDWordArray;
TDWordArray= array [0..0] of DWORD;
var
ImageInfo : PloadedImage;
pExportDirectory : PImageExportDirectory;
dirsize : Cardinal;
pDummy : PImageSectionHeader;
i : Cardinal;
pNameRVAs : PDWordArray;
begin
ImageInfo := new(PloadedImage);
pExportDirectory := new(PImageExportDirectory);
pDummy := new(PImageSectionHeader);

if MapAndLoad(Pchar(FileName), nil, Imageinfo, True,True ) then
begin
try
pExportDirectory:=ImageDirectoryEntryToData(ImageInfo.MappedAddress,False,
IMAGE_DIRECTORY_ENTRY_EXPORT,dirsize);
if (pExportDirectory<>nil) then
begin
pNameRVAs:=PDWordArray(ImageRvaToVa(ImageInfo.FileHeader,ImageInfo.MappedAddress,
DWORD(pExportDirectory^.AddressOfNames), pDummy));
for i:=0 to pExportDirectory^.NumberOfNames-1 do
with mainform.DllAPILists.Items.Add do
caption:=Pchar(ImageRvaToVa(ImageInfo.FileHeader,ImageInfo.MappedAddress,
pNameRVAs^,pDummy));
end;
finally
UnMapAndLoad(Imageinfo);
end;
end;
end;
 
感谢HD-COPY和DoubleWood帮助!在下对两位的精神和水平都十分佩服!~
希望以后还有机会得到你们的指点!
再次衷心感谢了!
 
接受答案了.
 
最后,我有我最后修正的原代码,没有了内存错误了:))
谁要的话可以跟我联系·!
 
anydelphi
发我一份
谢谢
EMAIL:XASGL@elong.COM
 
后退
顶部