Wie funktioniert 'BL' Arm Demontage Demontage Arbeit?

8

'bl' oder Verzweigung mit Link-Anweisung wird fast immer 0xebfffffe

Allerdings wissen der Prozessor und GNU binutils objdump irgendwie, wohin man verzweigt:

%Vor%

Woher wissen sie das?

    
yanychar 21.02.2013, 13:38
quelle

1 Antwort

11

Das Problem wird dadurch verursacht, dass Sie die Disassemblierung einer Objektdatei betrachten, nicht die endgültige ausführbare Datei oder das gemeinsame Objekt.

Wenn der Assembler die Objektdatei erstellt, ist die endgültige Adresse des bl -Ziels noch nicht festgelegt (dies hängt von den anderen Objektdateien ab, die damit verknüpft werden). Also setzt der Assembler die Adresse auf 0, fügt aber auch eine Verschiebung hinzu, die dem Linker mitteilt, wohin dieser bl in der endgültigen Datei gehen soll. (Sie können die Umzugsinformationen in objdump sehen, indem Sie den Schalter -r hinzufügen.)

Beim Linking verarbeitet der Linker die Verschiebung, berechnet die endgültige Adresse der Zielfunktion und patcht den Befehl so, dass die Zieladresse ausgerichtet wird. Wenn Sie die endgültige, verknüpfte ausführbare Datei disassemblieren, sehen Sie einen anderen Opcode.

    
Igor Skochinsky 21.02.2013, 14:14
quelle

Tags und Links