Zitat von
Oxmyx:
Ja, ist doch so. Aus einer Funktion wird ein Stück ausführbarer Code irgendwo im Speicher, der angesprungen werden kann. Aus Variablen werden Speicheradressen. Ein Methodenaufruf ist nur das Anspringen der Funktion mit Übergabe des this-Pointers (wie du sagtest), etc... Da existiert nichts mehr von den ursprünglichen Funktionen, Klassen und Variablen. Das ist alles nur noch ausführbarer Maschinencode, und nirgends ist der Code versteckt, den du mal in Delphi programmiert hast.
Na sicher doch. Und jetzt erklärst du mir wie das Programm laufen soll, wenn ja "nichts mehr" da ist? Na? Also entweder drückst du dich komplett falsch aus, weil du Funktions
namen oder Variablen
namen oder Klassen
namen meinst, aber Funktionen oder Variablen oder Klassen sagst, oder du hast tatsächlich noch kein Disassemblat gesehen. Ich kann dir gern einige zeigen, dann siehst du, daß sogar viele der Informationen, von denen du glaubst sie seien fort, noch (oft nur implizit) enthalten sind.
Sie (die Funktionen, Variablen und Klassen, insofern nicht wegoptimiert - zB durch Delphis Smartlinking) sind alle noch da, haben zwar keinen Namen (auch das läßt dich mit einem interaktiven Disassembler, wie IDA, ändern) aber sehr wohl eine Bedeutung. Und genau nach dieser sucht man als RE. Übrigens ist der bisher schrecklichste Code, den ich gesehen habe, VB-Code. Das Problem dort ist, daß man quasi mit der Runtime auf "du" sein muß um die Bedeutung der Funktionen zu kennen. Schlecht, wenn man VB aufgrund von schlechten Erfahrungen seit 2 Jahren vernachlässigt hat
Zitat von
Oxmyx:
Nebenbei wäre ich vorsichtig, jemandem in einer Diskussion zu unterstellen, ungebildet zu sein...
Ich hasse es, wenn mir Leute etwas unterstellen oder in meine Aussagen reinstecken, was objektiv in meiner Aussage nicht enthalten ist. Lies dir den Satz nochmal genau durch. Etwas grotesk, aber ich hatte ähnliche Probleme schon mit einer anderen Gruppe von Menschen :-\
Das ist ja lächerlich, bitte bilde dich erstmal weiter.
Weiterbilden kann man sich wohl kaum, wenn es keine Basis gibt! Weiterbilden bedeutet meist, sich zu einem bestimmten Gebiet noch mehr Wissen anzueignen, oder?
Ich empfinde deine Unterstellung ziemlich beleidigend.
Zitat von
Oxmyx:
Standardmäßig erzeugt Delphi für Klassen keine
RTTI (meines Wissens nach wird nur TPersistent und IInvokable mit
RTTI kompiliert).
Bei Delphi wird dies aber dank der Tatsache, daß es sich um einen Singlepass-Compiler handelt, wieder dadurch wettgemacht, daß die Strukturen der
VCL bekannt sind. Man kann also relativ unkompliziert den Lib-Code from echten Programm trennen. Und von einigen Programmen bleibt dann nicht mehr viel. Mit der
VCL hast du soweit ich mich entsinne aber immer auch
RTTI mit drin, will mich da aber nicht drauf festnageln lassen. Wenn du andere Infos hast, dann bring sie doch mal hier ein.
Begreift doch mal bitte, daß RE nicht daran scheitert, daß man "1 Million" Assembler-Mnemonics nicht verstehen könnte, sondern vielmehr daran, daß der Zeitaufwand so riesig ist. Der Aufwand ein Programm (komplett!) zu reversen übersteigt bei weitem den Aufwand so ein Programm selber neu zu schreiben.
Meist wird RE verwendet um:
- Viren/Malware zu analysieren
- Software zu cracken (was zweifelhaft ist, wenn die Ergebnisse veröffentlicht werden)
- Kompatibilität zu anderer Software herzustellen (zB zum DOS-Programm von dem die Quellen fehlen)
In allen diesen Fällen kann meist eine Komplettanalyse des Disassemblats vermieden werden, indem der RE smart genug ist die entsprechenden interessanten Stellen schnellstmöglich herauszufiltern.