Ich baue derzeit ein Bare Metal ausführbar, die einige spezielle Abschnitte enthält Code enthält. Wenn ich jedoch objdump -d
mache, bekomme ich nur den Code für die .text
und .init.text
Abschnitte. Die Manpage für objdump
sagt nur, dass es "nur die Abschnitte zerlegt, die Anweisungen enthalten sollen", wenn die Option -d
verwendet wird. Welche Abschnitte sind diese und wie sagt objdump
, welche Abschnitte zu decodieren sind? Ich weiß, dass ich die Option -D
auch verwenden kann, um eine vollständige Decodierung aller Abschnitte zu erhalten, aber das ist normalerweise viel mehr als ich brauche.Welchen Abschnitt objdump standardmäßig zerlegen
Antwort
objdump
intern verwendet libbfd
, um Abschnitt Informationen zu erhalten. objdump
übergibt einen Rückruf an bfd_map_over_sections()
, der den Rückruf für jeden Abschnitt aufruft. Beim Aufruf übergibt libbfd
einen asection *
an den Rückruf, der über ein Mitglied type
verfügt. Wenn der Typ die Flags SEC_CONTENTS | SEC_CODE
enthält, wird er von objdump
demontiert, wenn die -d
Option übergeben wird.
Getting in libbfd
ist ziemlich schwieriger, ich erwarte, dass die Typerkennung von der Architektur abhängt, aber ich hoffe, dass ich Ihnen zumindest den richtigen Zeiger gegeben habe. (Wahrscheinlich, wenn mehr Zeit haben werde ich mehr in diese graben und erweitern die Antwort) ..
Btw, wenn Sie ein Skript benötigen aus objdump -D
die Abschnitte von Interesse herauszufiltern könnten Sie sed
verwenden, wie dies :
# ------------Place section names here ---------------vvv
objdump -D object.o | sed -rn '/Disassembly of.*\.(comment|text)/{:a;p;n;/Disassembly of/!ba}'