Ich versuche ein Objekt zu zerlegen, das für ARM mit gcc gebaut wurde. Leider versucht objdump zu erraten, ob der Code ARM und Thumb ist und es falsch interpretiert: es denkt, dass mein Code Thumb ist, wenn es tatsächlich ARM ist.
Ich sehe, dass objdump eine Option hat, um es zu zwingen, alle Anweisungen als Thumb ( -Mforce-thumb
) zu interpretieren, aber es hat keine, um den ARM-Modus zu erzwingen!
Das scheint mir eine wirklich seltsame Unterlassung zu sein, und es behindert ernsthaft meine Fähigkeit, Arbeit zu erledigen (ich bin auf einem eingebetteten Gerät und mein einziges Mittel zum Debuggen ist es, die Disassemblierung zu betrachten). Ich habe verschiedene Ansätze versucht, einschließlich objdump eine ARM-Architektur zu verwenden, die Thumb nicht unterstützt, aber nichts scheint zu funktionieren. Irgendwelche Ideen?
(Und ja, ich weiß, dass die Anweisungen wirklich ARM sind ...)
arm-linux-gnueabi-objdump -marm -b binary -D
macht den Trick für mich. Es behält zwar die Symbolinformationen nicht, es ist also nicht genau das, wonach Sie suchen, aber es gibt Ihnen das Disassemble, was ein Anfang ist.
Das klingt wie ein Fehler in Compiler / Linker oder Objdump. Normalerweise sollten die Symbole richtig markiert sein, wenn sie Thumb oder ARM sind und entsprechend demontiert werden.
Das heißt, es gibt ein paar Dinge, die Sie ausprobieren können: