mikrocontroller.net

Forum: PC-Programmierung BIG Endian Binary convert to Little


Autor: Benjamin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich betreibe Debian auf einen Sheevaplug (ARM CPU )

Debian läuft im LE Modus
Ich habe hier ein kleines Binary für welches aber leider für ARM im Big 
Endian Modus übersetzt worden ist

Ich habe schon mir mit objdump auch den Assembler Code gezeugt

Ich vermute das es absolut unmöglich ist ohne die Quellen den Endian 
Modus zu wechseln.
Aber ich lasse mich gerne belehren :-)

Vielleicht kennt sich auch jemand mit IDA aus

Autor: Reinhard Kern (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Benjamin schrieb:
> Ich vermute das es absolut unmöglich ist ohne die Quellen den Endian
> Modus zu wechseln.
> Aber ich lasse mich gerne belehren :-)

Hallo,

das liegt mir ja sowas von fern - du kannst ein Programm disassemblieren 
und aus den Opcodes die Parameter bestimmen, wenn auch mühsam. Bei Daten 
versagt die Methode aber, höchstens Strings lassen sich noch 
analysieren, aber bei einem Record muss man den Aufbau aus der 
Definition kennen.

Gruss Reinhard

Autor: Johnny B. (johnnyb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Benjamin schrieb:
> Ich vermute das es absolut unmöglich ist ohne die Quellen den Endian
> Modus zu wechseln.

Es ist eigentlich kein Problem, nur ein riiiiesen Aufwand. Aber es wird 
sich wohl kaum lohnen, auch nur einen weiteren Gedanken daran zu 
verlieren.

Autor: Benjamin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
....erstmal Danke für die Antworten
Ich möchte ja nichts am Code verändern sondern "nur" den Endian Modus 
von Big auf Little umstellen (Archtiktur ARM)

Mir ist wiegesagt bewusst, dass es richtig wild wird.
Aber ich habe Urlaub und möchte etwas basteln und verstehen was dort 
passiert :-)

Wie geht man denn am besten vor wenn ich mit objdump -d mir den asm code 
erstelle  kann ich ihn dann mit as wieder neu erstellen oder gehen bei 
objdump schon Informationen  verloren?!

Ich habe das Binary aber auch für x86

Deshalb  habe ich mal Hex-Rays drauf angesetzt da ich mich aber das 
erstemal mit disasemblern beschäftige, war dies nicht von Erfolg 
gekrönt.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Benjamin schrieb:

> ....erstmal Danke für die Antworten
> Ich möchte ja nichts am Code verändern sondern "nur" den Endian Modus
> von Big auf Little umstellen (Archtiktur ARM)

Du kannst natürlich das Binary patchen, damit es wie little endian 
aussieht. Das wird der Linker das zwar vielleicht akzeptieren, aber es 
nützt die exakt garnichts, denn es wird allenfalls dann funktionieren, 
wenn dessen Code ausschliesslich mit 32-Bit Datentypen arbeitet.

> Mir ist wiegesagt bewusst, dass es richtig wild wird.
> Aber ich habe Urlaub und möchte etwas basteln und verstehen was dort
> passiert :-)

Na dann: Programm disassembleren. Verstehen was jede einzelne Zeile 
macht und jedes einzelne Datenbyte darstellt. Alles was von der 
Byteorder abhängt entsprechend abändern.

Autor: Michael Buesch (mb_)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
engl -> bytesex -> Bytegeschlecht

Eine Konvertierung zwischen den "Bytegeschlechtern" ist ohne sourcecode 
eher nicht möglich, weil der Code halt Sequenzen enthalten kann, die ein 
bestimmtes Geschlecht vorraussetzen. (Wird beim compilieren des C codes 
mit ifdef usw abgefragt).

Stelle dir das ganze wie eine Geschlechtsumwandlung vor. ;)
Nachher kommt zwar was dabei raus was ungefähr richtig aussieht, aber 
wenn man ins Detail guckt (wenn man das denn möchte), wird man doch noch 
einige gravierende Unterschiede sehen.

Disassemblieren und wieder assemblieren reicht definitiv nicht aus, weil 
damit die Codeteile, die eine bestimmte endianness vorraussetzen nicht 
ausgetauscht werden.

Autor: Benjamin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die ausfürhliche Erklärung

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.