Maschinencode => PureBasic

Fragen zu allen anderen Programmiersprachen.
Benutzeravatar
Karl
Beiträge: 520
Registriert: 21.07.2005 13:57
Wohnort: zu Hause

Beitrag von Karl »

Ich hatte mal einen C-Dekompilierer. Soweit ich weiss ist es unmöglich in C++ zu dekompilieren. In einer Doktorarbeit wurde auch erläutert, warum das unmöglich ist. Alles andere sind nur Gerüchte.

Karl
The Kopyright Liberation Front also known as the justified ancients of Mumu!
PB 5.X
real
Beiträge: 468
Registriert: 05.10.2004 14:43

Beitrag von real »

Decompiler sind - glaub ich - nicht wirklich verläßlich. Ich würde Assembler lernen und mittels Disassembler Informationen aus einem Binary ziehen, wenn ich sie bräuchte.

Zum Glück kenne ich keinen komplett funktionstüchtigen (also wirklich in die Originalsprache umwandelnden) Decompiler. Wäre ja noch schöner, wenn jedes Scriptkiddy meine Dateien durchwühlen könnte.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ich kenne zwar die betreffende doktorarbeit nicht, aber ich teile die auffassung, dass es im prinzip unmöglich ist, compilate höherer programmiersprachen rück zu übersetzen.

> Wäre ja noch schöner, wenn jedes Scriptkiddy meine Dateien durchwühlen könnte.

:mrgreen: yo

vor zwanzig jahren haben wir sowas gemacht...
C64, game in den speicher geladen, vorne angefangen und nacheinander jeder Decrement durch ein Break ersetzt und ausgetestet, bis wir das richtige DEC gefunden hatten, dass die Leben abzieht... war fünf stunden geistloses gedaddele, und wohl auch eher Rainer Zufall, dass es funktioniert hat...

aber heute ist das x-mal komplizierter, weil auch die oberfläche viel empfindlicher ist. man kann nicht mehr einfach mit ner büroklammer resetten und 5 sec. später is die maschine wieder OK....
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Karl
Beiträge: 520
Registriert: 21.07.2005 13:57
Wohnort: zu Hause

Beitrag von Karl »

Falls jemand Interesse an einem C-Decompiler hat, wird er hier fündig:

http://www.itee.uq.edu.au/~cristina/dcc/otherdcc.html

Das war glaube ich sogar das erste vernünftig beschriebene Dingens.

Gruß Karl
The Kopyright Liberation Front also known as the justified ancients of Mumu!
PB 5.X
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag von Deeem2031 »

Kaeru Gaman hat geschrieben:
ts-soft hat geschrieben:Mit .NET solls wohl unter bestimmten Voraussetzungen noch einfacher sein,
da kriegste dann fast Original-Source wieder. (Nur Gerücht?) Habs mal
gehört oder gelesen.
was ja nur bedeuten kann, dass .NET garnicht optimiert,
sondern einfach geblockerten code erzeugt.
Da hat schonwieder einer nicht verstanden was JIT-Compiler tun :roll:
Man kann .Net Programme wesentlich einfacher decompileren als "normale" Programme, das liegt aber nicht daran das die Programme nicht optimiert werden, sondern das der ASM- bzw. Byte-Code wesentlich eindeutiger ist - da gibt es halt nur einen Befehl eine Variable auszulesen und nicht wie bei x86-asm hunderte Wege. Man kann sogar bei .Net die Variablennamen in dem Programm speichern, wodurch man dann praktisch den orginalen Sourcecode zurückgewinnen kann.
Aber es gibt auch Gegenmittel: Obfuscatoren - "verunstalten" den Code so das er unleserlich wird. Dann hat man ungefähr den selben Salat wie bei x86-Programmen ;)
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Michael Vogel
Beiträge: 72
Registriert: 16.03.2006 11:20

Beitrag von Michael Vogel »

Damit man ein Gefühl kommt, wie schwer das Dekompilieren werden kann, schaut euch einmal euren in Assembler übersetzten PB-Source an:

also den Code ins Compiler-Verzeichnis kopieren und dort den Compiler mit der Option /Comment aufrufen, das Ergebnis ist interessant (da in vielen Bereichen verdammt gut optimiert wird) und komplex - wer will den wissen, wann der Speicherwert im Register eax die lokale Variable "i", wann die globale Variable "ganz-wichtig.l" und wann als Pointer auf einen String verwendet wird?

Entsprechend ist lediglich zu erwarten, dass automatisiert nur relativ kleine Module in "verständlichen" Assembler rückübersetzbar sind, ein Transformation in funktionstüchtige (nicht notwendigerweise "lesbare") Sourcen aller Art ist jedoch kein Problem.
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Das mit C++ kann man sicher auch ohne Doktorarbeit erklären :) eigentlich ja ganz einfach, der maßgebliche Unterschied zwischen C und C++ ist ja die Objektorientierung - und das ist so gesehen keine programmiertechnische Sache, sondern eine rein konzeptionelle und logische. Und woher will so ein Decompiler wissen, wie er die ganzen Objekte anlegen und hierarchisch ordnen soll? Auch Sachen wie Polymorphie sind für ein nicht humanes Etwas ein Ding der Unmöglichkeit. OOP ist ja rein eine Sache für den Programmierer, letztendlich ist alles, was mit OOP gemacht wird, auch irgendwie ohne OOP realisierbar. Vielleicht nicht immer ganz einfach aber es geht. Aber ein Programm kann natürlich (ohne "Vorwissen") niemals auf die Ideen der objektorientierten Struktur kommen und das dann alles wieder so rückübersetzen.
Bild     Bild

ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
Benutzeravatar
Karl
Beiträge: 520
Registriert: 21.07.2005 13:57
Wohnort: zu Hause

Beitrag von Karl »

@ZeHa: Sicher, aber bis dahin war es lediglich eine Vermutung. :)

Gruß Karl
Antworten