Entwickler-Ecke

Windows API - Dll Ausführen...


Philipp_Reitter - Di 22.01.08 10:21
Titel: Dll Ausführen...
Hi...

kann ich irgenddie eine Dll ausführen....
d.h. dass z.b. ein Dll Loader die dll started und die dann im hintergrund wie ein normales Programm läuft nur ohne form halt...

Mfg
Philipp


Martok - Do 24.01.08 17:52

Ähem. Eine DLL stellt Funktionen bereit, die dann jemand anders aufrufen kann. 'Laufen' kann die DLL selber gar nicht...

Eventuell suchst du ja RUNDLL.exe...?


Philipp_Reitter - Fr 25.01.08 18:11

naja aber die dll hat doch ne (in C++ DLLMain) in delphi einfach nur das leere begin - end.... da könnt ich doch was drinnen laufen lassen oder was dann z.b. nen thread started oder irgendwas verarbeited ne datei aufmacht oder so aber wenn ich z.b. ne schleife habe die unendlich dauert läuft die dll dann auch immer oder wie?!
weil im security task manager sehe ich dass im hinterdrund dll's laufen... was is dann das?


GPVG - Fr 25.01.08 19:17
Titel: Eine DLL kann ausführbare Programmteile enthalten
Sieht dann in etwa so aus:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
library blabla;

uses {was die so alles braucht};

function blublu(var y:string):string;
begin
{hier sollte die Funktion irgendetwas machen}
end;

Exports blublu;

end.

Das war's schon.

Aufgerufen werden kann sie dann so:

Delphi-Quelltext
1:
2:
function abc(var s:string): stringstdcallexternal 'blabla.dll' name 'blublu';
{nix weiter, die Funktion kann jetzt wie jede andere benutzt werden}

Ist nicht die einzige Möglichkeit, sollte für den Anfang jedoch ausreichen.

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


AHT - Fr 25.01.08 19:57

user profile iconMartok hat folgendes geschrieben:
'Laufen' kann die DLL selber gar nicht...

Eventuell suchst du ja RUNDLL.exe...?


Hallo Martok...

Da irrst du dich ganz gewaltig - es hängt da von der Technik ab.
Habe sogar schon in CSRSS.EXE selbständig läufende DLLs injiziert, die quasi in diesem Servide einen eigenen Thread am laufen hielten. Bei Bedarf liefere ich gerne eine Programm, was genau das tut.

Gruß

AHT


AHT - Fr 25.01.08 20:00

user profile iconPhilipp_Reitter hat folgendes geschrieben:
naja aber die dll hat doch ne (in C++ DLLMain) in delphi einfach nur das leere begin - end.... da könnt ich doch was drinnen laufen lassen oder was dann z.b. nen thread started oder irgendwas verarbeited ne datei aufmacht oder so ...?!
weil im security task manager sehe ich dass im hinterdrund dll's laufen... was is dann das?


Da kann man nur sagen . BINGO! Wie gesagt, auf die Technik kommt es an. Etwas nachdenken und APIs büffeln, dann hast du die Lösung.

Gruß

AHT


BenBE - Fr 25.01.08 22:01

InDelphi geht genau das auch ...


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
library RunMe;

uses Forms, Dialogs;

begin
    MessageDlg('Hello World!', mrInformation, [mbOK], 0);
end.


Dann die DLL noch mit LoadLibrary laden und freuen, dass eine Meldung kommt ...

Lesen der Delphi-Hilfe soll helfen ... - manchmal :P


Philipp_Reitter - Sa 26.01.08 13:49

d.h. ich brauche ein programm was die dll einmal started...?
kann sich dass dann schließen ohne dass die dll geschlossen wird?


Chryzler - Sa 26.01.08 14:18

user profile iconAHT hat folgendes geschrieben:
Da irrst du dich ganz gewaltig - es hängt da von der Technik ab.
Habe sogar schon in CSRSS.EXE selbständig läufende DLLs injiziert, die quasi in diesem Servide einen eigenen Thread am laufen hielten. Bei Bedarf liefere ich gerne eine Programm, was genau das tut.

Jo, wäre mal interessant zu sehen. Ist aber nur hilfreich wenn es in Delphi geschrieben ist und ich den Source haben kann. :P
user profile iconPhilipp_Reitter hat folgendes geschrieben:
d.h. ich brauche ein programm was die dll einmal started...?
kann sich dass dann schließen ohne dass die dll geschlossen wird?

Kommt darauf an, wo die DLL gestartet wird. Wenn sie in einen anderen Prozess injiziert wird, dann muss der andere Prozess weiterlaufen.


Martok - Sa 26.01.08 15:14

Naja gut. An DLLMain hab ich grade nicht gedacht. Aber selbst dann muss irgendwer die DLL laden und am leben halten.

Du kannst natürlich auch eine normale Exe erzeugen, in DLL umbennen und starten...


jaenicke - Sa 26.01.08 16:34

Ich frage mich eigentlich eher was das für einen Sinn hat. Was hat eine derart laufende DLL denn für einen Vorteil gegenüber einem normalen Delphiprogramm ohne Formular?
Ich sehe da im Moment keinen einzigen Vorteil.


AHT - Sa 26.01.08 17:41

user profile iconMartok hat folgendes geschrieben:
Naja gut. An DLLMain hab ich grade nicht gedacht. Aber selbst dann muss irgendwer die DLL laden und am leben halten.


Nichts leichter als das. Das was die DLL "am Leben erhält", muss in die DLLMain der injizierten DLL. Funktioniert auf jedem Windows Betriebssystem.

user profile iconjaenicke hat folgendes geschrieben:
Ich frage mich eigentlich eher was das für einen Sinn hat. Was hat eine derart laufende DLL denn für einen Vorteil gegenüber einem normalen Delphiprogramm ohne Formular?

Na ja, da gibt es einige Vorteile - kleines Beispiel: Versuche doch mal eine in CSRSS injizierte DLL die selbständig laufend eigenen Code ausführt über den Taskmanager zu beenden...


jaenicke - Sa 26.01.08 17:43
Titel: Re: Dll Ausführen...
user profile iconAHT hat folgendes geschrieben:
user profile iconjaenicke hat folgendes geschrieben:
Ich frage mich eigentlich eher was das für einen Sinn hat. Was hat eine derart laufende DLL denn für einen Vorteil gegenüber einem normalen Delphiprogramm ohne Formular?

Na ja, da gibt es einige Vorteile - kleines Beispiel: Versuche doch mal eine in CSRSS injizierte DLL die selbständig laufend eigenen Code ausführt über den Taskmanager zu beenden...
Ich meinte das im Hinblick darauf:
user profile iconPhilipp_Reitter hat folgendes geschrieben:
kann ich irgenddie eine Dll ausführen....
d.h. dass z.b. ein Dll Loader die dll started und die dann im hintergrund wie ein normales Programm läuft nur ohne form halt...
Das hörte sich nicht so an, als ob es um soetwas ginge.


AHT - Sa 26.01.08 17:55
Titel: Re: Dll Ausführen...
user profile iconjaenicke hat folgendes geschrieben:
Das hörte sich nicht so an, als ob es um soetwas ginge.

Lies dir mal seinen zweiten Thread durch. Es kann sehr gut sein, dass ich ihn hier falsch verstanden habe - für mich scheint es ihm bei beiden Sachen um die Erweiterung eines fremden Programmes um eigene Funktionen zu gehen.
Ein "Loader" Programm schießt eine DLL in den Speicherbereich irgendeines Prozesses, die dann selbständig ohne den Loader laufend Code ausführen soll.
Ob der Loader die DLL in den eigenen Prozess schießt oder nicht, ist erst einmal egal. Es ging ihm hier wohl um das "selbständige Laufen".