大悟还俗

邮箱 key_ok@qq.com 我的收集 http://pan.baidu.com/share/home?uk=1177427271
  新随笔  :: 联系 :: 订阅 订阅  :: 管理

枚举导出函数

Posted on 2013-10-21 14:30  大悟还俗_2  阅读(214)  评论(0编辑  收藏  举报
unit Unit1;

interface

uses ImageHlp,Windows,Dialogs;

  procedure ListDLLExports(const AFileName:string);

implementation

procedure ListDLLExports(const AFileName:string);

type
  TDWordArray = array [0..$FFFFF] of DWORD;

var
  image:TLoadedImage;
  pExpDir:PImageExportDirectory;
  iSize:Cardinal;
  pNameRVAs:^TDWordArray;
  i: Integer;
  sName:string;
  lrs:PImageSectionHeader;
begin
  if MapAndLoad(PAnsiChar(AFileName),nil,@image,true,true) then
  try
    pExpDir := ImageDirectoryEntryToData(image.MappedAddress,false,IMAGE_DIRECTORY_ENTRY_EXPORT,iSize);
    if pExpDir <> nil then
    begin
      lrs := nil;
      pNameRVAs := ImageRvaToVa(image.FileHeader,image.MappedAddress,DWORD(pExpDir^.AddressOfNames),lrs);
      for i := 0 to Pred(pExpDir^.NumberOfNames) do
      begin
        lrs := nil;
        sName := PAnsiChar(ImageRvaToVa(image.FileHeader,image.MappedAddress,DWORD(pNameRVAs^[i]),lrs));
        ShowMessage(sName);
      end;
    end;
  finally
    UnMapAndLoad(@image);
  end;
end;

end.
View Code