Nun eigentlich ist das gar nicht so zwittrig.
Das Einzige, was einen wundern könnte, wäre eben, dass man in einer Exe Funktionen exportieren kann. Dies kann man einfach so erklären - das Portable Executable (
PE) Format erlaubt das Exportieren SOWIE was ja eig. klar ist IMPORTIEREN von Funktionen nun einmal für beide Executables (Exe &
Dll).
Der Rest:
der LoadLibrary Aufruf >>lädt die Executable (sich selbst)
NICHT<<. Er schaut zuerst, ob das zu ladende "Modul" in der Modulliste schon vorhanden ist (Siehe PEB). Falls ja, erhöht es nur den Referenzzähler und liefert das
Handle (was eig. mehr die Adresse des gemappten Moduls ist) zurück; mehr nicht! Falls es nicht vorhanden wäre, was ja nicht der Fall ist, da es ausgeführt wird, lädt es die Executable und mappt diese in den Speicherraum des Prozesses.
Interessanter wäre es zu probieren, ne andere Executable per LoadLibrary zu laden!
Ala
Delphi-Quellcode:
program _1;
type
TProc = procedure(P: Pointer); stdcall;
var
p: TProc;
begin
hMod := LoadLibrary( >program _2< );
p := GetProcAddress( hMod, 'DoBlub' );
p( NIL );
end.
// ======================================
program _2
procedure DoBlub(P: Pointer); stdcall;
begin
// ...
MessageBoxA( 0, 'Ich bin die exportierte Funktion', 'Hoi', 0 );
end;
exports
DoBlub;
begin
MessageBoxA( 0, 'Ich wurde geladen', 'Information', 0 );
end.
MfG