AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Adresse einer funktion im hauptmodul herausfinden
Thema durchsuchen
Ansicht
Themen-Optionen

Adresse einer funktion im hauptmodul herausfinden

Ein Thema von DGL-luke · begonnen am 10. Jul 2005 · letzter Beitrag vom 10. Jul 2005
Antwort Antwort
Benutzerbild von DGL-luke
DGL-luke

Registriert seit: 1. Apr 2005
Ort: Bad Tölz
4.149 Beiträge
 
Delphi 2006 Professional
 
#1

Re: Adresse einer funktion im hauptmodul herausfinden

  Alt 10. Jul 2005, 19:31
ah ja.

aber jetz krieg ich ne 0-AV.

ich poste mal alles:
Delphi-Quellcode:
library DChild;

uses
  SysUtils,
  Classes;

type TIntFunc=function(iParam:integer):integer;

var myfunc:TIntFunc;
    assgnd:boolean;

{$R *.res}

function FetchFunc(address:Pointer):boolean; stdcall;
begin
 @myfunc:=address;
 assgnd:=true;
 result:=true;
end;

function Main(param:integer):integer; stdcall;
begin
 myfunc(param);
 result:=0;
end;

exports FetchFunc,Main;

begin
end.
Delphi-Quellcode:
//hauptprogramm - habe den kopf mal weggelassen.


type TIntfunc = function(iParam:integer):integer; stdcall;
     TPFunc = function(adress:Pointer):boolean; stdcall;

var
  Form1: TForm1;
  param:integer;
  fetchfunc:TPfunc;
  mainfunc:TIntFunc;
  modhandle:THandle;



implementation

{$R *.dfm}

function TForm1.dosomething(iParam:integer):integer;
begin
application.MessageBox(PChar('Die dll meldet: '+inttostr(iParam)),'Erfolg');
result:=iParam;
end;

procedure TForm1.FormCreate(Sender: TObject);
var srec:TSearchrec;
begin
listbox1.Clear;
findfirst(extractfilepath(paramstr(0))+'*.dll',faAnyFile,srec);
listbox1.Items.add(srec.Name);
while findnext(srec)=0 do listbox1.items.Add(srec.Name);
findclose(srec);

end;

procedure TForm1.ListBox1DblClick(Sender: TObject);
var s:string;
    i:integer;
begin
s:='';

for i := 0 to listbox1.Count -1 do
 begin
  if listbox1.Selected[i] then s:=listbox1.Items[i];
 end;

if s<>'then
 begin
  modhandle:=LoadLibrary(PChar(extractFilePath(paramstr(0)+s)));
  application.MessageBox('DLL geladen','Erfolg');
 end;

end;

procedure TForm1.Button1Click(Sender: TObject);
var p:pointer;
begin
@fetchfunc:=getProcAddress(modhandle,'FetchFunc'); //fetchfunc krallt sich die adresse der übergebenen funktion
@mainfunc:=getProcAddress(modhandle,'Main'); //mainfunc ruft die übergebene funktion auf

application.MessageBox('funktionen geladen','');


asm
    mov eax, offset dosomething
    mov p, eax
end;

fetchfunc(p); // hier der fehler
sleep(10);

application.MessageBox('funktion übergeben','');

mainfunc(strtoint(edit1.Text)); //wie bereits gesagt: mainfunc ruft....
end;

end.
ist jetzt auf dem stand von 21:46.
Lukas Erlacher
Suche Grafiktablett. Spenden/Gebrauchtangebote willkommen.
Gotteskrieger gesucht!
For it is the chief characteristic of the religion of science that it works. - Isaac Asimov, Foundation I, Buch 1
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:20 Uhr.
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