Delphi - entfernen Sie Namen in BPL's

7

Ist es möglich, solche Namen in Delphi zu entfernen? Wenn ja, wo bekomme ich mehr Informationen?

Beispiel für eine Fehlermeldung, bei der ein bestimmter Eintrag in dbrtl100.bpl nicht gefunden werden kann Ich möchte wissen, welche genaue Funktion es nicht finden kann (Einheit, Klasse, Name, Parameter usw.).

%Vor%

Ich weiß, dass es die Methode GetTableNameFromSQLEx in der Dbcommon Unit ist (ich habe Delphi mit den RTL / VCL-Quellen), aber manchmal stoße ich auf Apps, wo nicht jeder Code verfügbar ist (ja, Kunden sollten immer den gesamten Quellcode kaufen) für Sachen von Drittanbietern, aber manchmal nicht.)

Aber sag das ist ein Beispiel, für das ich den Code nicht habe, oder nur die Interface-Dateien (BDE.INT irgendjemand?) Welche Parameter hat es (d. H. Welche mögliche Überlastung)? Welchen Rückgabetyp hat es?

Ist das für jede Delphi-Version gleich?

- Jeroen

Bearbeiten 1 :

Danke an Rob Kennedy: tdump -e dbtl100.bpl macht den Trick. Keine Notwendigkeit für -um :

%Vor%

Bearbeiten Sie 2 :

Danke an Tornrej, der diesen deutschen EDN-Artikel gefunden hat ( Englisch Google Übersetzung ). Dieser Artikel beschreibt das Format ziemlich genau, und es sollte möglich sein, etwas Delphi-Code zu erstellen, um das zu entmangeln.

Schade, dass die Webseite, die der Autor erwähnt (und die E-Mail), jetzt tot ist, aber es ist gut, diese Information zu kennen.

- Jeroen

    
Jeroen Wiert Pluimers 19.10.2009, 20:42
quelle

4 Antworten

7

In Delphi gibt es keine Funktion, die Funktionsnamen entmangelt, und ich weiß nicht, dass sie irgendwo dokumentiert ist. Delphi in Kürze erwähnt, dass das Dienstprogramm "tdump" über -um um die gefundenen Symbole zu entmagnetisieren. Ich habe es noch nie probiert.

%Vor%

Wenn das nicht funktioniert, dann sieht es nicht nach einem sehr komplizierten Schema aus, um sich selbst zu entwirren. Offensichtlich beginnt der Name mit "@" und wird gefolgt vom Namen der Einheit und der Funktion, getrennt durch ein anderes "@" Zeichen. Auf diesen Funktionsnamen folgt "$ qqrx" und dann die Parametertypen.

Die Parametertypen werden mit der Zeichenanzahl des Typnamens codiert, gefolgt von demselben "@" - Trennzeichen von vor.

Das "$" ist notwendig, um das Ende des Funktionsnamens und den Anfang der Parametertypen zu markieren. Das verbleibende Geheimnis ist der "qqrx" -Teil. Das zeigt der Artikel Tondrej gefunden . Der "qqr" gibt die Aufrufkonvention an, die in diesem Fall register ist, a.k.a. fastcall . Das "x" gilt für den Parameter und bedeutet, dass es konstant ist.

Der Rückgabetyp muss nicht im Namen der mangled-Funktion codiert werden, da das Überladen sowieso keine Rückgabetypen berücksichtigt.

    
Rob Kennedy 19.10.2009, 21:13
quelle
7

Siehe auch diesen Artikel (auf Deutsch). Ich nehme an, dass das Mangling wahrscheinlich abwärtskompatibel ist und in späteren Delphi-Versionen neue Mangling-Schemata für neue Sprachfunktionen eingeführt werden.

    
Ondrej Kelle 20.10.2009 09:32
quelle
6

Wenn Sie C ++ Builder haben, überprüfen Sie $ (BDS) \ source \ cpprtl \ Source \ misc \ unmangle.c - es enthält den Quellcode für den Mechanismus zur Aufhebung der Zuordnung, der von TDUMP, dem Debugger und dem Linker verwendet wird. (C ++ Builder und Delphi verwenden dasselbe Mangling-Schema.)

    
Moritz Beutel 03.02.2010 21:51
quelle
0

Aus den Delphi 2007-Quelldateien:

%Vor%

Dies scheint die gleiche Version zu sein, da ich auch die gleiche .BPL in meinem Windows \ System32-Ordner habe.

Die Quelle befindet sich in [Programme] \ CodeGear \ RAD Studio \ 5.0 \ source \ Win32 \ db

Borland / Codegear / Embarcadero hat diese Codierung schon seit einiger Zeit verwendet und gab nie viele Details über das .BPL-Format. Ich war nie sehr an ihnen interessiert, da ich in meinen Projekten keine Laufzeitbibliotheken verwende. Ich ziehe es vor, sie in meine Projekte zu kompilieren, obwohl dies zu viel größeren ausführbaren Dateien führen wird.

    
Wim ten Brink 19.10.2009 20:50
quelle

Tags und Links