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