Delphi-PRAXiS

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.

Luckie 13. Okt 2008 12:30

Re: DLL innerhalb eines Prozesses verwenden
 
Nein, nicht das Prozesshandle, sondern das Handle, was der Prozess für die DLL verwendet. Ichmeine, an das muss er dran kommen, sonst arbeitet er ja nicht mit der gleichen Instanz der DLL udn genau das will er ja.

Allerdings ist mir ziemlich schleierhaft, wozu man das braucht. Eventuell sollte er uns mal erklären, was er vor hat, dann kann man vielleicht einen einfacheren Weg finden.

nicodex 14. Okt 2008 08:22

Re: DLL innerhalb eines Prozesses verwenden
 
Zitat:

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

Es gibt keine allgemeine Lösung für dein Problem, da dies gegen die Grundsätze der Speicher- und Prozessverwaltung verstößt.

Mehr Informationen könnten also nicht schaden.
(Compiler, Hersteller (eiegene?), Funktionsprototyp(en), vorhandene IPC-Mechanismen, ...)

Win32.API 14. Okt 2008 18:57

Re: DLL innerhalb eines Prozesses verwenden
 
Zitat:

Zitat von Luckie
Nein, nicht das Prozesshandle, sondern das Handle, was der Prozess für die DLL verwendet. Ichmeine, an das muss er dran kommen, sonst arbeitet er ja nicht mit der gleichen Instanz der DLL udn genau das will er ja. [...]

Wie brechi schon gesagt hat, man kann sich mit GetModuleHandle einfach das Handle der DLL besorgen


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:41 Uhr.

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