Forum: PC-Programmierung BIG Endian Binary convert to Little


von Benjamin (Gast)


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

von Reinhard Kern (Gast)


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

von Johnny B. (johnnyb)


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.

von Benjamin (Gast)


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.

von (prx) A. K. (prx)


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.

von Michael B. (mb_)


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.

von Benjamin (Gast)


Lesenswert?

Danke für die ausfürhliche Erklärung

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.