取得某一dll所有输出函数名

    技术2022-05-11  127

    取得某一dll所有输出函数名在uses里加上ImageHlp

    procedure ListDLLFunctions(DLLName: String; List: TStrings);type  chararr = array [0..$FFFFFF] of Char;  var  H: THandle;  I,  fc: integer;  st: string;  arr: Pointer;  ImageDebugInformation: PImageDebugInformation;begin  List.Clear;  DLLName := ExpandFileName(DLLName);  if FileExists(DLLName) then  begin    H := CreateFile(PChar(DLLName), GENERIC_READ, FILE_SHARE_READ or      FILE_SHARE_WRITE, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);    if H<>INVALID_HANDLE_VALUE then      try        ImageDebugInformation := MapDebugInformation(H, PChar(DLLName), nil, 0);        if ImageDebugInformation<>nil then          try            arr := ImageDebugInformation^.ExportedNames;            fc := 0;            for I := 0 to ImageDebugInformation^.ExportedNamesSize - 1 do              if chararr(arr^)[I]=#0 then              begin                st := PChar(@chararr(arr^)[fc]);                if Length(st)>0 then                  List.Add(st);                if (I>0) and (chararr(arr^)[I-1]=#0) then                  Break;                fc := I + 1              end          finally            UnmapDebugInformation(ImageDebugInformation)          end      finally        CloseHandle(H)      end  endend;

    procedure TForm1.Button1Click(Sender: TObject);var  List: TStrings;  I: integer;  S: String;

    begin  List := TStringList.Create;

      ListDLLFunctions('c:/windows/system/Abcsda.dll', List);  showmessage(inttostr(list.count));  S := 'List of functions';  for I := 0 to List.Count - 1 do    S := S + #13#10 + List[I];  ShowMessage(S);

      List.Freeend;

    //rock//转载请保留此信息


    最新回复(0)