AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Auf Exports hin prüfen ohne DLL zu laden
Thema durchsuchen
Ansicht
Themen-Optionen

Auf Exports hin prüfen ohne DLL zu laden

Ein Thema von EWeiss · begonnen am 25. Nov 2013 · letzter Beitrag vom 12. Jul 2021
Antwort Antwort
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
698 Beiträge
 
Delphi 10.3 Rio
 
#1

AW: Auf Exports hin prüfen ohne DLL zu laden

  Alt 12. Jul 2021, 11:32
Hallo, ich vermute dass der PE Header für 64Bit Programme eine andere Sturktur hat. Da wirst Du wohl mal MSDN befragen müssen.

€: Ich habe dich falsch verstanden
Unter 64Bit wird die Word-Ausrichtung im Programm anders sein. Dein Record ist dann zu groß und ließt an der falschen Stelle.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.

Geändert von Sinspin (12. Jul 2021 um 11:35 Uhr)
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#2

AW: Auf Exports hin prüfen ohne DLL zu laden

  Alt 12. Jul 2021, 11:35
Hallo, ich vermute dass der PE Header für 64Bit Programme eine andere Sturktur hat. Da wirst Du wohl mal MSDN befragen müssen.
Hmm.. Es ist kein 64Bit Programm sondern eine 32Bit.DLL die ich mit einem 64Bit Programm auslesen will.
Denke sollte egal sein welchen PE Header die 64Bit hat. Damit lese ich nur aus. Oder?

EDIT:
Hmm.. Welcher Record?
Kann mir nur vorstellen das einige Daten typen für 64Bit falsch sind.. aber welche
Kompilieren läßt es sich ja.

Geändert von venice2 (12. Jul 2021 um 11:44 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.339 Beiträge
 
Delphi 12 Athens
 
#3

AW: Auf Exports hin prüfen ohne DLL zu laden

  Alt 12. Jul 2021, 12:30
Hmm.. Es ist kein 64Bit Programm sondern eine 32Bit.DLL die ich mit einem 64Bit Programm auslesen will.
Denke sollte egal sein welchen PE Header die 64Bit hat. Damit lese ich nur aus. Oder?
Nein, natürlich nicht.

Der/die ersten PE-Header sind gleich.
Dort steht dann auch drin, was die Binary bzw. PortableExecute für ein Format hat. (DOS, Win32, Win64 usw.)
Und damit kannst du dann bestimmen welches DatenFormat die nachfolgenden Header/Strukturen haben.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#4

AW: Auf Exports hin prüfen ohne DLL zu laden

  Alt 12. Jul 2021, 12:37
Hmm.. Es ist kein 64Bit Programm sondern eine 32Bit.DLL die ich mit einem 64Bit Programm auslesen will.
Denke sollte egal sein welchen PE Header die 64Bit hat. Damit lese ich nur aus. Oder?
Nein, natürlich nicht.

Der/die ersten PE-Header sind gleich.
Dort steht dann auch drin, was die Binary bzw. PortableExecute für ein Format hat. (DOS, Win32, Win64 usw.)
Und damit kannst du dann bestimmen welches DatenFormat die nachfolgenden Header/Strukturen haben.
Hmm.. Schwierig.
Eins davon schlägt immer fehl.

Delphi-Quellcode:
        ExportTable := ImageRvaToVa(Header, ImagePointer, Header.OptionalHeader.DataDirectory[0].VirtualAddress, nil);
        if not Assigned(ExportTable) then
          exit;

        NamesPointer := ImageRvaToVa(Header, ImagePointer, Cardinal(ExportTable.AddressOfNames), nil);
        if not Assigned(NamesPointer) then
          exit;

        Names := ImageRvaToVa(Header, ImagePointer, Cardinal(NamesPointer^), nil);
        if not Assigned(Names) then
          exit;

Geändert von venice2 (12. Jul 2021 um 12:40 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
698 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Auf Exports hin prüfen ohne DLL zu laden

  Alt 12. Jul 2021, 13:02
Hmm.. Welcher Record?
Kann mir nur vorstellen das einige Daten typen für 64Bit falsch sind.. aber welche
Kompilieren läßt es sich ja.
Delphi-Quellcode:
var
...
  Header: PIMAGE_NT_HEADERS;
  ExportTable: PIMAGE_EXPORT_DIRECTORY;
Da stecken ja zwei Records dahinter. Wurden die nicht via packed record deklariert werden die wohl unter 64Bit eine andere Datenausrichtung haben.
Du könntest auch recht damit haben, das es Felder in den Records sind.

PS: Ist immer wieder schön zu sehen das noch jemand mit den WinAmp Dlls rumspielt.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#6

AW: Auf Exports hin prüfen ohne DLL zu laden

  Alt 12. Jul 2021, 13:07
Danke. Werde mal schauen wie ich das geregelt bekomme irgendwann fällt mir schon was ein
Mit den Plugins ist halt das Problem das diese alle 32Bitig sind bekanntlich kann man da ja auf normalen Wege 64Bit Anw.-> 32Bit.dll nichts machen.
Aber wird schon.
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
698 Beiträge
 
Delphi 10.3 Rio
 
#7

AW: Auf Exports hin prüfen ohne DLL zu laden

  Alt 12. Jul 2021, 13:32
Das gibt dann aber noch mehr Probleme. Du musst die Funktionen ja dann auch geladen bekommen und der CPU füttern.
Ich würde mir wohl eine 32Bit exe schreiben mit der ich via IPC oder SharedMem rede. Das geht aber nur bei Sachen die nicht absolut zeitkritisch sind.
Wenn ich das richtig sehe geht es dir um Visualisierung. Da sollte genug Luft für ein paar Millisekunden sein.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#8

AW: Auf Exports hin prüfen ohne DLL zu laden

  Alt 12. Jul 2021, 13:43
Zitat:
Ich würde mir wohl eine 32Bit exe schreiben mit der ich via IPC oder SharedMem rede. Das geht aber nur bei Sachen die nicht absolut zeitkritisch sind.
Ich habe eine 32Bit Anwendung

Aber ich möchte die Plugins 32Bit mit einer 64Bit Anwendung ansprechen was ja auch funktioniert.
Habe halt nur das Problem das ich den Einsprungs punkt nicht auslesen kann.

Ich habe es temporär so gelöst und umgehe die Export Funktion (kann aber Probleme geben wenn eine falsche DLL dort abgelegt wird)
Das ist der Sinn der Überprüfung der ExportedFunctionNames damit es hier nicht knallt!
Delphi-Quellcode:
//Prüfroutine für Winamp-Plugins
function IsWinampPlugin(APlugin:string):LongBool;
var
  ext : string;
  Exported : TStringList;
  IntI : Integer;

begin
  result := FALSE;
  ext := uppercase(ExtractFileExt(APlugin));

  if (ext <> '.DLL') then
    exit;

/// Exported := TStringList.Create;

// VisName := PWideChar(APlugin);
// ImageExportedFunctionNames(VisName, Exported);

// for IntI := 0 to Exported.Count - 1 do
// begin
// if (Exported.Strings[IntI] = 'winampVisGetHeader') then
// begin
      result := TRUE;
// break;
// end;
// end;

// Exported.Free;

end;
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Auf Exports hin prüfen ohne DLL zu laden

  Alt 12. Jul 2021, 13:45
Es gibt 32 und 64 bit header, du musst auslesen ob PE oder PE+ datei typ und dann entsprechend den in windows.pas hinterlegten header nutzen.
Per standard wird der header genutzt mit dem du das kompilat erstellst, du musst delphi also etwas "überzeugen" den richtigen zu verwenden.

Wenn benötigt buddel ich aus meinem exe tool die sourcen raus.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
venice2
(Gast)

n/a Beiträge
 
#10

AW: Auf Exports hin prüfen ohne DLL zu laden

  Alt 12. Jul 2021, 13:46
Es gibt 32 und 64 bit header, du musst auslesen ob PE oder PE+ datei typ und dann entsprechend den in windows.pas hinterlegten header nutzen.
Per standard wird der header genutzt mit dem du das kompilat erstellst, du musst delphi also etwas "überzeugen" den richtigen zu verwenden.

Wenn benötigt buddel ich aus meinem exe tool die sourcen raus.
Jup wäre super wenn du zeit dafür hast.

Aber irgendwie verstehe ich das Problem nicht.
Nochmal. Ich habe eine 64Bit Anwendung die soll eine 32Bit.dll einlesen und mir den Export Namen davon zurückgeben.
Was hat jetzt die 64Bit Anwendung mit dem Header zu tun der wird doch aus der 32Bit DLL ausgelesen.

Geändert von venice2 (12. Jul 2021 um 13:50 Uhr)
  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 07:56 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