Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi DLL innerhalb eines Prozesses verwenden (https://www.delphipraxis.net/122233-dll-innerhalb-eines-prozesses-verwenden.html)

hedie 11. Okt 2008 21:55


DLL innerhalb eines Prozesses verwenden
 
Hallo

Ich möchte auf die Proceduren einer DLL zugreifen welche in einem bestimmten Prozess geladen ist.

Wie kann ich dies realisieren?


Danke schonmal

DelphiKlaus 12. Okt 2008 08:17

Re: DLL innerhalb eines Prozesses verwenden
 
Hey,

es ist doch egal, ob die DLL schon in einem anderen Prozess geladen ist oder nicht. Du lädst sie einfach in Deinen Prozess und kannst auf die Prozeduren zugreifen.

MfG

Klaus

SirThornberry 12. Okt 2008 08:18

Re: DLL innerhalb eines Prozesses verwenden
 
@DelphiKlaus: nicht ganz. Wenn der andere Prozess die DLL mit bestimmten Funktionsaufrufen initialisiert hat deren Wert eman nicht kennt funktioniert es nicht.

hedie 12. Okt 2008 09:41

Re: DLL innerhalb eines Prozesses verwenden
 
Genau um solche init werte....

Wie kann ich den nun auf die Funktionen einer in einem anderen Prozess geladenen DLL zugreifen?

Apollonius 12. Okt 2008 17:16

Re: DLL innerhalb eines Prozesses verwenden
 
Am einfachsten ist es wohl, eine weitere DLL in den fremden Prozess zu injizieren, die dann aufgefordert wird, bestimmte Funktionen aufzurufen und ihre Ergebnisse zurücktransferiert.

hedie 12. Okt 2008 23:32

Re: DLL innerhalb eines Prozesses verwenden
 
Zitat:

Zitat von Apollonius
die dann aufgefordert wird

Wie fordere ich den diese diese Dinge an?

Das ist ja mein problem.... Wie kommuniziere ich mit der DLL?

Wie rufe ich Funktionen aus ihr auf?

Luckie 12. Okt 2008 23:35

Re: DLL innerhalb eines Prozesses verwenden
 
Der injizierte Code muss sich mit MSDN-Library durchsuchenGetProcAddress die Adressen der geladenen unktion holen und kann sie dann aufrufen. Allerdings musst du für GetProcAddress das Handle vom Prozess nutzen mit dem der Prozess die DLL gelden hat. Wie du allerdings an das Handle dran kommst, weiß ich auch nicht.

hedie 12. Okt 2008 23:40

Re: DLL innerhalb eines Prozesses verwenden
 
Also brauch ich das handle des Prozesses indem die DLL geladen ist?

Apollonius 13. Okt 2008 10:07

Re: DLL innerhalb eines Prozesses verwenden
 
Deine DLL kann die Funktionen der fremden DLL ganz normal importieren (statisch oder dynamisch). Um Anforderungen entgegenzunehmen kannst du einen beliebigen IPC-Mechanismus verwenden. Dazu solltest du in der Hauptroutine der DLL (begin..end.) einen neuen Thread erzeugen, der dann als IPC-Server fungiert: Fensternachrichten entgegennehmen, an der Pipe lauschen... Aus diesem Thread kannst du dann die importierten Funktionen aufrufen.

Diese DLL musst du dann in den fremden Prozess injizieren. Dazu kannst du den normalen Weg mit CreateRemoteThread und LoadLibrary gehen.

brechi 13. Okt 2008 11:37

Re: DLL innerhalb eines Prozesses verwenden
 
Zitat:

Zitat von Luckie
Der injizierte Code muss sich mit MSDN-Library durchsuchenGetProcAddress die Adressen der geladenen unktion holen und kann sie dann aufrufen. Allerdings musst du für GetProcAddress das Handle vom Prozess nutzen mit dem der Prozess die DLL gelden hat. Wie du allerdings an das Handle dran kommst, weiß ich auch nicht.

Der injezierte Code kann sich normal mit GetModuleHandle das Handle eines Modules (z.B. kernel32.dll). Mit einem Prozesshandle muss nichts gemacht werden.


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:45 Uhr.
Seite 1 von 2  1 2      

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