Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Werkzeuge (https://www.delphipraxis.net/63-sonstige-werkzeuge/)
-   -   Funktionen / Proceduren die ein anderes Programm benutzt (https://www.delphipraxis.net/46128-funktionen-proceduren-die-ein-anderes-programm-benutzt.html)

ReDoX 19. Mai 2005 06:20


Funktionen / Proceduren die ein anderes Programm benutzt
 
Hi,
Gibt es eine Möglichkeit die Function/Proceduren die ein anderes Programm benutzt auszulesen?
Mir würden schon die Namen vieleicht auch noch die dll in der sie enthalten sind reichen.
Vieleicht aus der exe?
Oder aus dem Laufenden Prozess?
Das ganze sollte, wenns möglich ist, unter WinXP laufen.


Mfg ReDoX

SirThornberry 19. Mai 2005 06:24

Re: Funktionen / Proceduren die ein anderes Programm benutzt
 
wenn du ein Programm mit OllyDbg oder anderen Debuggern ausführst solltest du alle module sehen die von der Anwendung genutzt werden.

c113plpbr 19. Mai 2005 12:25

Re: Funktionen / Proceduren die ein anderes Programm benutzt
 
Wenn du nicht gerade einen Debugger verwenden willst, könntest du den Dependency Walker ausprobieren. Mit der Funktion "Start Profiling" startet der das Programm und listet dir alle DLL-Importe & alle Funktionsaufrufe auf.

ciao, Philipp

ReDoX 19. Mai 2005 12:43

Re: Funktionen / Proceduren die ein anderes Programm benutzt
 
Hi,

@SirThornberry: danke aber das Prgramm kannte ich schon.
@c113plpbr: WOW. Das Programm ist echt super :thumb:. Genau so was habe ich gesucht.
Danke!

Mfg ReDoX

brechi 19. Mai 2005 12:55

Re: Funktionen / Proceduren die ein anderes Programm benutzt
 
es werden aber nur alle statsichen funktionen gelistet...

ReDoX 19. Mai 2005 13:03

Re: Funktionen / Proceduren die ein anderes Programm benutzt
 
Hmm du hast recht! :?
Kennst du ein Programm das auch dynamische anzeigt, ist das überhauptmöglich?

Mfg ReDoX

Bernhard Geyer 19. Mai 2005 13:06

Re: Funktionen / Proceduren die ein anderes Programm benutzt
 
Zitat:

Zitat von ReDoX
Hmm du hast recht! :?
Kennst du ein Programm das auch dynamische anzeigt, ist das überhauptmöglich?

Menu "Profile/Start Profiling" und Testlauf durchführen.

ReDoX 19. Mai 2005 13:32

Re: Funktionen / Proceduren die ein anderes Programm benutzt
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ok.
Aber ich bekomme noch immer keine "Funktions Namen" ich bekomme so was wie im Anhang.
Das ist ein einfaches Delphi Project mit einen MessageBox die im OnCreate aufgerufen wird.
Aber ich sehe nur welche dlls geladen werden...
So wie ich mir das vorstelle müsste sich da irgendwo so was befinden wie: MessageBoxA aus user32.dll aufgerufen.
:oops:
Mfg ReDoX

brechi 19. Mai 2005 14:29

Re: Funktionen / Proceduren die ein anderes Programm benutzt
 
hab da mal was gemacht:

Delphi-Quellcode:
procedure ListImports(dllbasep, importp: pointer);
type timportblock = record
                      Characteristics: cardinal;
                      TimeDateStamp: cardinal;
                      ForwarderChain: cardinal;
                      Name: pchar;
                      FirstThunk: pointer;
                    end;
     pimportblock = ^timportblock;
var myimport: pimportblock;
    myimportf: pointer;
    thunks: ^pointer;
    dllname, importname: pchar;
begin
  myimport := importp;
  dllname := pointer(integer(dllbasep)+integer(myimport^.name));
  while (myimport^.FirstThunk <> nil) do
  begin
    thunks := pointer(integer(myimport^.FirstThunk)+integer(dllbasep));
    while thunks^ <> nil do
    begin
      if (cardinal(thunks^) > cardinal(dllbasep)) then
      begin
        importname := pchar(cardinal(thunks^) mod $10000);
      end else
      begin
        myimportf := pointer(integer(dllbasep)+integer(thunks^)+2);
        importname := pchar(myimportf);
      end;
      Form1.ListBox1.items.add(importname+' impoted from '+dllname);
      inc(thunks,1);
    end;
    myimport := pointer(integer(myimport)+sizeof(timportblock));

    dllname := pointer(integer(dllbasep)+integer(myimport^.name));
  end;
end;


procedure ShowImports(dllname: pchar); stdcall;
var IDH: PImageDosHeader;
    read,memsize: cardinal;
    filemem, all: pointer;
    INH: PImageNtHeaders;
    seca: cardinal;
    sectionh: PImageSectionHeader;
    i, h: integer;
    filesize: cardinal;
begin
  h := CreateFile(dllname,GENERIC_READ,FILE_SHARE_READ,nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,0);
  if h <> -1 then
  begin
    filesize := GetFileSize(h,nil);
    filemem := VirtualAlloc(nil,filesize,MEM_COMMIT or MEM_RESERVE,PAGE_EXECUTE_READWRITE);
    if filemem <> nil then
    begin
      readfile(h,filemem^,filesize,read,nil);
      IDH := filemem;
      if IDH^.e_magic = IMAGE_DOS_SIGNATURE then
      begin
        INH := pointer(cardinal(filemem)+cardinal(IDH^._lfanew));
        if INH^.Signature = IMAGE_NT_SIGNATURE then
        begin
          sectionh := pointer(cardinal(INH)+cardinal(sizeof(TImageNtHeaders)));
          memsize := INH^.OptionalHeader.SizeOfImage;
          if memsize <> 0 then
          begin
            all := virtualalloc(nil,integer(memsize),MEM_COMMIT or MEM_RESERVE,PAGE_EXECUTE_READWRITE);
            if all <> nil then
            begin
              seca := INH^.FileHeader.NumberOfSections;
              for i := 0 to seca-1 do
              begin
                CopyMemory(pointer(cardinal(all)+sectionh^.VirtualAddress),
                  pointer(cardinal(filemem)+cardinal(sectionh^.PointerToRawData)),
                  sectionh^.SizeOfRawData);
                sectionh := pointer(integer(sectionh)+sizeof(TImageSectionHeader));
              end;
              ListImports(pointer(cardinal(all)), pointer(cardinal(all)+INH^.OptionalHeader.DataDirectory[1].VirtualAddress));
            end;
          end;
        end;
      end;
      VirtualFree(filemem,filesize,MEM_DECOMMIT);
    end;
    CloseHandle(h);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  ShowImports(pchar(paramstr(0)));
end;

ReDoX 19. Mai 2005 15:07

Re: Funktionen / Proceduren die ein anderes Programm benutzt
 
Hi,
Danke für die Mühe. :-D
Da ich einige Teile des Sources nicht verstehe muss ich ihn mir mal in ruhe angucken.
Aber das ist noch immer nicht genau das was ich wollte. Sorry.
So stelle ich mir das vor :
Ich lade eine Exe mit dem Programm / oder das Programm ist schon gestartet danach
drücke ich einen Button [START] das Programm loggt alle functionen die aufgerufen werden bis ich einen Button [STOP] drücke.

Mfg ReDoX


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:59 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz