Hallo zusammen.. ich habe aus einem Mega 128 den Quellcode ausgelesen. Ich möchte das Programm gerne nachvollziehen können. Bevor ich näher drauf eingehe: Mir ist klar dass dies keine einfache Aufgabe ist und nicht ala "C zu ASM - compilieren" geht. (hab schon die lustigsten dinge gelesen.. "GCC kann nach ASM compilieren... das geht damit bestimmt auch andersrum.." o.ä.) Mein Ziel: Ich möchte den Code leserlicher machen um irgendwie zu verstehen was dort passiert. Evtl würd ich gerne noch Änderungen einbauen. - Eine Hilfe könnte z.B. sein die Register gegen leserlichere Bezeichnungen auszutauschen (z.B. "0x1B" in "(PORTA,0)") Vielleicht gibt es ja etwas das dies automatisiert erledigt und die vorhandenen Files von WINAVR benutzt. Ideal währe natürlich ein an den GCC angelehnter recompiler der mir fertigen und schön formatierten C-Code ausspuckt (Bitte mit sinnvollen Bezeichnungen für die Variabelen) ... träum Mal im Ernst.. hat sich schonmal jmd damit auseinander gesetzt und kann mir Tips geben? würd mich freuen von euch zu hören. bis denne und danke schonmal. MfG Markus
Dazu müsste dein re-Compiler wissen, wie der Compiler welchen Befehl wie umsetzt. Dazu kommen dann noch Sprungmarken etc. Es gibt die Möglichkeit den Opcode (die ausgelesenen Daten) in einem Disassembler als Assembler (Mnemonic) lesbar zu gestalten. Dabei fehlen dann aber auch wieder die Registerbezeichnungen und Sprungmarken. Ergo: Assembler ja, C-Code nein.
Das Problem einer Dekompilierung ist, das eine Kompilierung (also C nach ASM) keine - um es mal mathematisch zu formulieren - "bijektive Abbildung" ist. Du kannst also nicht einfach wieder ASM nach C wandeln, weil es zigfachen C-Code gibt, der in denselben ASM-Code kompiliert werden kann. Zu Deinem konkretes Problem mit Portnamen: Sowas kannst Du doch leicht mit einem Perl/Python-Skript oder einer kleinem selbstgeschrieben Programm lösen. Ist doch prinzipiell nur Textersetzung.
Bringt Dich wahrscheinlich konkret nicht weiter, aber hier ist was Allgemeines zum Thema: http://www.program-transformation.org/Transform/DecompilationPossible
@Xenu >"bijektive Abbildung" WOW.. musste erstmal Wiki interviewen.. ;) iss mir schon klar dass es net einfach umwandet werden kann.. sagte ich ja glaub ich oben auch.. >Ist doch prinzipiell nur Textersetzung. hatte gehofft dass jmd sowas schonmal gemacht hat. Wollt halt nicht das Rad (mit meinem jämmerlichen halbwissen) neu erfinden.. @inoffizieller WM-Rahul >Dazu müsste dein re-Compiler wissen, wie der Compiler welchen Befehl wie umsetzt. jaa.. darum ja auch einen re-compiler der an GCC angelehnt iss... >Es gibt die Möglichkeit den Opcode (die ausgelesenen Daten) in einem >Disassembler als Assembler (Mnemonic) lesbar zu gestalten... das kann AVRStudio auch... das iss also net das problem.. bin also immernoch net schlauer.. Gruß markus
>jaa.. darum ja auch einen re-compiler der an GCC angelehnt iss...
In gewissen Grenzen wird das schon gehen...
Probleme wird es mit Berechnungen geben...
Wäre ein interessantes Projekt.
>Wäre ein interessantes Projekt.
lol... genau das wollt ich hören..
jetzt müssen sich nur noch Opfer.. ähm.. ich mein Programmierer
finden..
sag bescheid wenn ihr fertig seit.. abeitabgeb ;)
Bin doch bestimmt net der Erste, der in irgend nem Gerät nen
Atmel-Controller gefunden hat und sich denkt "was der da drin wohl so
alles macht..."
G
@Markus: Die meisten AVRs, die man so in Geräten findet, haben aber die Lock-Bits gesetzt, da kommt beim Auslesen nur Müll heraus. Im übrigen kann ein erfahrener Programmier auch das disassemblierte Listing interpretieren, bzw. muss es sogar, denn zum Reverse-Engineering ist immer Handarbeit nötig. Wie soll denn z.B. ein automatischer Decompiler "sinnvolle Bezeichnungen für die Variablen" finden?
>@Markus: Die meisten AVRs, die man so in Geräten findet, haben aber die >Lock-Bits gesetzt, da kommt beim Auslesen nur Müll heraus. bei dem den ich hier liegen habe sind die Lock-Bits net gesetzt.. also JTAG angeworfen, Flash ausgelesen.. und schon kann ich im AVRStudio debuggen.. soweit bin ich imemrhin schonmal >Im übrigen kann ein erfahrener Programmier auch das disassemblierte >Listing interpretieren, bzw. muss es sogar, denn zum >Reverse-Engineering ist immer Handarbeit nötig. Erfahrener Programmierer? umguck da kenn ich leider keinen... bin erst vor ca einem Jahr mit C und AVRs bekannt gemacht worden... >Wie soll denn z.B. ein automatischer Decompiler "sinnvolle >Bezeichnungen für die Variablen" finden? die frage iss hoffentlich rethorisch gemeint oder?? ;) Währe halt wünschenswert.. obs realisierbar iss steht auf nem anderen Blatt.. ;) wie währs mit: Variabele_wo_zwoelfmal_gelesen_und_dreimal_geschrieben_wird Variabele_die_fast_ne_Konstante_sein_koennte usw... gigl g Markus PS: Vielleich noch ein paar Vorschläge ala "Ich hab da mal gesehen.." oder "es gab da mal.."? Was alles net geht iss mir nämlich auch recht klar.. ;)
Ich hab da mal im lezten WS nen "Binärbombe" mitm GDB decompilen müssen das geht ganz schön auf die nerven, aber man kann tatsächlich selsbt am ASM Listing ein Programm nachverfolgen. Du könntest ja für den Anfang einfach das Programm Dissassemblen, dann schreibste dir nen simples Programm was alle Adressen durch Symbolische Namen ersezt, vieleicht hilft das ja schon weiter! Ein Problem wird noch sein, das ggf Daten im Flash liegen, und die wird der Dissassembler versuche zu interpretieren :)
ICh bin zwar nicht so ein extremer Fan von Assambler, aber ich glaube, es geht schneller wenn du Assambler lernst und das ganze von Hand machst. Und der befehl "Suchen und Ersetzen" könnte wahrscheinlich dann auch ganz hilfreich sein. mfg Schoasch
Hallo, allzuviel zum Thema Disassembler/Reassembler für AVR ist wirklich nicht zu finden. Zumindest, wenn es kostenlos sein soll. Nach den wenigen Hinweisen im Web scheint obiges Tool free zu sein. Er sammelt zumindest erstmal die Konstanten und die Register halbwegs zusammen und erkennt Subroutinen und SRAM-Zugriffe recht brauchbar. Gruß aus Berlin Michael
............In den nächsten Wochen waren mehrere Hacker damit beschäftigt, den ausgelesenen Assemblercode zu verstehen und zu dokumentieren. Dazu verwendeten wir AVR-Studio und Ida Pro............ Quelle: http://www.ccc.de/hackabike/index_de.html
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.