Ich versuche, eine MIPS-Firmware umzukehren. Die Firmware ist Big-Endian-codiert für einen 32-Bit-r4kec-Prozessor.Zwei sequentielle Verzweigungsbefehle in MIPS-Assembly?
ich demontiert (mit objdump) die binäre, um zu sehen, was die Montage aussieht, und alles sieht aus wie gültiger Code, aber gleich am Anfang des Codes ich die folgenden zwei Befehle sehen:
bfc00220 152a0001 bne t1, t2, 0xbfc00228
bfc00224 10000009 b 0xbfc0024c
Der erste Befehl prüft die Werte der Register t1 und t2 und springt zu einer Adresse, wenn sie nicht gleich sind. Die zweite Anweisung scheint den Fall-Through-Fall zu behandeln, um direkt zu einer nachfolgenden Adresse zu springen. So weit, so gut oder nicht?
Meiner Kenntnis nach ist dies nicht legal. Alle verfügbaren MIPS-Dokumente, die ich gelesen habe, geben an, dass der Befehl, der direkt einem Verzweigungs-/Sprungbefehl folgt, als ein Sprungverzögerungsschlitz behandelt wird, dessen Befehl immer ausgeführt wird (ausgenommen die Zweigwahrscheinliche Klasse von Befehlen) durchgeführt.
Das Schlüsselproblem hier ist, dass ein anderer Zweig/Sprung nicht erlaubt in der Sprungverzögerung Slot ist, und dies wird den Prozessor in einem undefinierten Zustand verlassen.
Also was soll ich von diesem Code machen? Ich glaube nicht, dass dies eine Handarbeit ist (obwohl es nicht zu weit hergeholt wäre) für eine CPU, die diese Situation in einer bekannten deterministischen Art behandelt. Ich kann auch nicht glauben, dass ein Compiler wissentlich Code wie diesen erzeugt. Die andere Möglichkeit ist, dass ich den falschen Decompiler für die Binärdatei verwende, oder dass ich die Endiannität falsch habe, oder etwas anderes ...
Kann mir jemand erklären, was hier vor sich geht?
Wie lautet die Adresse der ersten Anweisung, die von einem MIPS-Prozessor nach einem Reset oder Hochfahren ausgeführt wird? Gibt es eine Änderung, dass die ersten beiden Anweisungen eine Art Header sind und niemals als Code ausgeführt werden? – rcgldr
'b' Anweisung ist * Zweig *, nicht" Pause ". –
bearbeitet für s/break/branch/für zukünftige Suchende. – markgz