<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      取得某一dll所有輸出函數名

      [摘要]在uses里加上ImageHlpprocedure ListDLLFunctions(DLLName: String; List: TStrings);type chararr = array [...
      在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
        end
      end;

      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.Free
      end;

      //rock
      //轉載請保留此信息


      日韩精品一区二区三区高清