Forum: Mikrocontroller und Digitale Elektronik ASM recompiler für GCC?


von Markus Boremski (Gast)


Lesenswert?

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

von inoffizieller WM-Rahul (Gast)


Lesenswert?

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.

von Xenu (Gast)


Lesenswert?

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.

von Xenu (Gast)


Lesenswert?

Bringt Dich wahrscheinlich konkret nicht weiter, aber hier ist was
Allgemeines zum Thema:

http://www.program-transformation.org/Transform/DecompilationPossible

von Markus Boremski (Gast)


Lesenswert?

@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

von inoffizieller WM-Rahul (Gast)


Lesenswert?

>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.

von Markus Boremski (Gast)


Lesenswert?

>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

von Christian (Gast)


Lesenswert?

@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?

von Läubi (Gast)


Lesenswert?

a b c d e? :)

von inoffizieller WM-Rahul (Gast)


Lesenswert?

var0, var1 ... ?

von Markus Boremski (Gast)


Lesenswert?

>@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.. ;)

von Läubi (Gast)


Lesenswert?

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

von Schoasch (Gast)


Lesenswert?

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

von Michael U. (Gast)


Angehängte Dateien:

Lesenswert?

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

von Ulrich (Gast)


Lesenswert?

............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

von Detlef _. (detlef_a)


Lesenswert?

IdaPro macht AVR, wie ober gesagt, und kommt mit ner limitierten Demo
Version.

Cheers
Detlef

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
Noch kein Account? Hier anmelden.