mikrocontroller.net

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


Autor: Markus Boremski (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Xenu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Xenu (Gast)
Datum:

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

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

Autor: Markus Boremski (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Markus Boremski (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Läubi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
a b c d e? :)

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
var0, var1 ... ?

Autor: Markus Boremski (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.. ;)

Autor: Läubi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 :)

Autor: Schoasch (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael U. (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Ulrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Detlef _a (detlef_a)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
IdaPro macht AVR, wie ober gesagt, und kommt mit ner limitierten Demo
Version.

Cheers
Detlef

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.