AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte DLLExports
Thema durchsuchen
Ansicht
Themen-Optionen

DLLExports

Ein Thema von Luckie · begonnen am 8. Apr 2003 · letzter Beitrag vom 1. Jul 2003
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Benutzerbild von Luckie
Luckie
Registriert seit: 29. Mai 2002
Jupp. Mal wieder was neues von mir.

Wie der Name schon vermuten läßt, listet das Programm alle Funktionen auf, die von einer DLL exportiert werden.

Wie immer, mit Source und nonVCL.

(Der Code für die DLL ist in einer extra Unit und in einer Klasse verpackt, sollte also kein Problem sein sie in eigenen Programmen einzusetzen.)

Download: DLLExports
Ein Teil meines Codes würde euch verunsichern.
 
Daniel

 
Delphi 10.4 Sydney
 
#2
  Alt 8. Apr 2003, 07:54
Hallo Luckie,

das Programm gefällt mir, allerdings habe ich noch ein paar Wünsche. *g* Also:
  • Ich will ... nein ... ich wünsche mir..., dass ich das Fenster in seiner Größe verändern kann.
  • Ich fände es angenehmer, wenn beim Klick auf eine Zeile nicht nur die erste Spalte markiert wird. Die Informationen einer Zeile hängen zusammen und spaltenweise zu selektieren, macht aus meiner Sicht wenig Sinn.
  • Kannst Du nicht jetzt auf Knopfdruck das Delphi-Grundgerüst für eine Import-Unit generieren, in der alle (selektierten?) Funktionen aufgelistet sind. Man müsste dann nur noch per Hand die Parameterlisten einfügen.
  • Ich würde den Funktionsnamen in der aktuell selektierten Zeile gerne per Doppelklick in die Zwischenablage befördern können.
Daniel R. Wolf
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#3
  Alt 8. Apr 2003, 08:33
Na der ein oder andere Wunsch wird sich erfüllen lassen. Nur die Schokolade werde ich nicht liefern können - online.
Michael
  Mit Zitat antworten Zitat
MathiasSimmack
 
#4
  Alt 8. Apr 2003, 09:07
Ich habe da auch noch was:

1. Allgemein: Die Formatierung "%p" gibt es nur unter Windows 2000 und XP. Ältere Windows-Versionen können damit nichts anfangen. So zeigt Windows 98 bspw. nur ein "p" an.

2. Wenn ich das Programm via Delphi starte, kann ich den Öffnendialog nicht aufrufen. Ich habe mal die Konstante "OPENFILENAME_SIZE_VERSION_400" durch
Code:
ofn.lStructSize := sizeof(TOpenFileName);
ersetzt, dann ging´s. Das Problem trat sowohl unter 98 als auch unter XP auf.

3. In der kompilierten Version erscheinen beim Aufruf des Öffnendialogs unter Win 98 merkwürdige Zeichen im Eingabefeld. Ich habe im Quellcode deshalb vorher mal den "buffer" geleert.

4. In der Prozedur "FillLV" solltest du die List-View erst mal leeren, sonst werden die Funktion einer neuen DLL einfach nur an die bestehende Liste angehangen bzw. in diese eingefügt.
Und mit BeginUpdate/EndUpdate ließe sich die Bildschirmausgabe sicher noch etwas beschleunigen.

5. Noch ein Problem in der for-Schleife der Prozedur "TDllInfo.DumpExportDirectories":
Delphi-Quellcode:
for i := 0 to FFuncsCount - 1 do
begin
  if i < pExportDirectory^.NumberOfNames then
  begin
    Name := PChar(ImageRvaToVa(imageinfo.FileHeader, imageinfo.MappedAddress,
      pNameRVAs^[i], pDummy));
    FNames[i] := Name;
  end
  else
    FNames[i] := '';

// -- FEHLER -->
  FNames[i] := Name;
// <---

{...}
Die als "Fehler" markierte Anweisung bewirkt, dass Funktionen ohne eigenen Namen den zuletzt ausgelesenen Namen zugewiesen bekommen. Das kann man bspw. in der "shell32.dll" (XP) sehen, da tauchen etwa in der Hälfte jede Menge WriteCabinetState-Funktionen auf.

6. Erklären kann ich´s (ehrlich gesagt) nicht: wenn ich deinen Quellcode kompiliere und starte, dann sehe ich unter Win 98 bei der Auswahl einer DLL gar nichts. Unter XP erhalte ich eine EAccessViolation-Exception bei diesen beiden Anweisungen:
Delphi-Quellcode:
pFunctionRVAs := ImageRvaToVa(imageinfo.FileHeader, imageinfo.MappedAddress,
  DWORD(pExportDirectory^.AddressOfFunctions), pDummy);
pOrdinals := ImageRvaToVa(imageinfo.FileHeader, imageinfo.MappedAddress,
  DWORD(pExportDirectory^.AddressOfNameOrdinals), pDummy);
Tatsächlich muss ich beides auskommentieren und in der Schleife durch 0/nil ersetzen:
Delphi-Quellcode:
FOrdinals[i] := 0; //pOrdinals^[i];
FAddresses[i] := nil; // Pointer(pFunctionRVAs^[FOrdinals[i]]);
dann erhalte ich zumindest die Namen der gefundenen Funktionen (sofern diese einen Namen haben, natürlich). Was ich dabei nicht erklären kann, ist die Tatsache, dass die von dir kompilierte und dem Archiv beiliegende Version des Tools diese Probleme nicht verursacht sondern mir auch die Adressen und Ordinalwerte der Funktionen anzeigt.

Du hast uns da doch wohl nicht etwas eine "kaputte" Version des Quälcodes angedreht.

Gruß.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#5
  Alt 8. Apr 2003, 09:32
Zitat von MathiasSimmack:
Ich habe da auch noch was:
Wie zu erwarten.
Zitat:
1. Allgemein: Die Formatierung "%p" gibt es nur unter Windows 2000 und XP. Ältere Windows-Versionen können damit nichts anfangen. So zeigt Windows 98 bspw. nur ein "p" an.
Hast du eine Lösung parat?
Zitat:
2. Wenn ich das Programm via Delphi starte, kann ich den Öffnendialog nicht aufrufen. Ich habe mal die Konstante "OPENFILENAME_SIZE_VERSION_400" durch
Code:
ofn.lStructSize := sizeof(TOpenFileName);
ersetzt, dann ging´s. Das Problem trat sowohl unter 98 als auch unter XP auf.
Klappt es dann auch unter 98? Ich denke da gab es mal Probleme, deswegen habe ich das so gemacht. Ich habe D6 Personal, du arbeitets mit D5 oder?
Zitat:
3. In der kompilierten Version erscheinen beim Aufruf des Öffnendialogs unter Win 98 merkwürdige Zeichen im Eingabefeld. Ich habe im Quellcode deshalb vorher mal den "buffer" geleert.
Vergesse ich immer wieder.
Zitat:
4. In der Prozedur "FillLV" solltest du die List-View erst mal leeren, sonst werden die Funktion einer neuen DLL einfach nur an die bestehende Liste angehangen bzw. in diese eingefügt.
Und mit BeginUpdate/EndUpdate ließe sich die Bildschirmausgabe sicher noch etwas beschleunigen.
Das wäre eventuell sinnvoll.
Zitat:
5. Noch ein Problem in der for-Schleife der Prozedur "TDllInfo.DumpExportDirectories":
Delphi-Quellcode:
for i := 0 to FFuncsCount - 1 do
begin
  if i < pExportDirectory^.NumberOfNames then
  begin
    Name := PChar(ImageRvaToVa(imageinfo.FileHeader, imageinfo.MappedAddress,
      pNameRVAs^[i], pDummy));
    FNames[i] := Name;
  end
  else
    FNames[i] := '';

// -- FEHLER -->
  FNames[i] := Name;
// <---
{...}
Die als "Fehler" markierte Anweisung bewirkt, dass Funktionen ohne eigenen Namen den zuletzt ausgelesenen Namen zugewiesen bekommen. Das kann man bspw. in der "shell32.dll" (XP) sehen, da tauchen etwa in der Hälfte jede Menge WriteCabinetState-Funktionen auf.
Da fehlt wohl ein begin und end bei dem else.
Zitat:
6. Erklären kann ich´s (ehrlich gesagt) nicht: wenn ich deinen Quellcode kompiliere und starte, dann sehe ich unter Win 98 bei der Auswahl einer DLL gar nichts. Unter XP erhalte ich eine EAccessViolation-Exception bei diesen beiden Anweisungen:
Delphi-Quellcode:
pFunctionRVAs := ImageRvaToVa(imageinfo.FileHeader, imageinfo.MappedAddress,
  DWORD(pExportDirectory^.AddressOfFunctions), pDummy);
pOrdinals := ImageRvaToVa(imageinfo.FileHeader, imageinfo.MappedAddress,
  DWORD(pExportDirectory^.AddressOfNameOrdinals), pDummy);
Tatsächlich muss ich beides auskommentieren und in der Schleife durch 0/nil ersetzen:
Delphi-Quellcode:
FOrdinals[i] := 0; //pOrdinals^[i];
FAddresses[i] := nil; // Pointer(pFunctionRVAs^[FOrdinals[i]]);
dann erhalte ich zumindest die Namen der gefundenen Funktionen (sofern diese einen Namen haben, natürlich). Was ich dabei nicht erklären kann, ist die Tatsache, dass die von dir kompilierte und dem Archiv beiliegende Version des Tools diese Probleme nicht verursacht sondern mir auch die Adressen und Ordinalwerte der Funktionen anzeigt.
Hm.
Zitat:
Du hast uns da doch wohl nicht etwas eine "kaputte" Version des Quälcodes angedreht.
Wenn dann umgekehrt. Quellcode ist aktueller als die Exe.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Darty
Darty
 
#6
  Alt 8. Apr 2003, 10:32
Ist klasse das Teil

Wäre es möglich die dazugehörigen Parameter zu bekommen ? Ne Lösung habe ich selber keins parat falls fragst
Matthias Knebel
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#7
  Alt 8. Apr 2003, 10:39
Bugs gefixt und Wünsche, so weit möglich, entsprochen. Meinem Webhoster ist nur gerade vor 3 Minuten eingefallne, dass sie ein Update machen wollen und aufgrund dessen FTP und alles abgeschaltet haben. Hochladen ist erst mal nicht. Ich weiß auch nicht wann es wieder geht.
Michael
  Mit Zitat antworten Zitat
MathiasSimmack
 
#8
  Alt 8. Apr 2003, 11:10
Zitat von Luckie:
Hast du eine Lösung parat?
Na ja, die Adresse als Integer casten und dann einfach nur hexadezimal (8stellig) formatieren. Ich hoffe, das ist richtig so:
s := Format('%.8X', [integer(DLLInfo.FuncAddresses[i])]); Anzeigen würde es was, aber ob das nun auch die Adresse ist ...

Zitat:
Klappt es dann auch unter 98? Ich denke da gab es mal Probleme, deswegen habe ich das so gemacht. Ich habe D6 Personal, du arbeitets mit D5 oder?
Ja. Und: Ja.

Zitat:
Da fehlt wohl ein begin und end bei dem else.
Eigentlich würde es genügen, die von mir als "Fehler" markierte Zeile zu entfernen. Aber das hast du inzwischen wohl schon getan.

Zitat:
Zitat von MathiasSimmack:
Ich habe da auch noch was:
Wie zu erwarten.
Da fällt mir doch glatt noch ein, dass Balloon-Tooltipps nur in der TNA richtig gut aussehen ...
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#9
  Alt 8. Apr 2003, 11:37
Es sind die Adressen.

FTP geht immer noch nicht.
Michael
  Mit Zitat antworten Zitat
MathiasSimmack
 
#10
  Alt 8. Apr 2003, 12:18
Noch was: aus der TDllClass-Unit bitte die "SysUtils" entfernen und statt dessen die Format-Routine der "GUITools.inc" benutzen. Fällt mir gerade so ein.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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:50 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