2015-03-28 18 views
6

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

5

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}'