2015-03-28 23 views
6

Attualmente sto costruendo un eseguibile bare metal, che contiene alcune sezioni speciali contenenti codice. Tuttavia, quando eseguo lo objdump -d, ottengo solo il codice per le sezioni .text e .init.text. La manpage per objdump dice solo che "disassembla solo quelle sezioni che dovrebbero contenere istruzioni" quando si utilizza l'opzione -d. Quali sezioni sono queste e in che modo objdump indica quali sezioni decodificare? So che posso anche usare l'opzione -D per ottenere una decodifica completa di tutte le sezioni, ma di solito è molto più di quanto mi serve.Quale sezione esegue il disassemblaggio di objdump per impostazione predefinita

risposta

5

objdump utilizza internamente libbfd per ottenere informazioni sulla sezione. objdump passa una richiamata a bfd_map_over_sections() che chiama la richiamata su ciascuna sezione. Quando chiamato, libbfd passa un asection * alla richiamata, che ha un membro type. Se il tipo contiene i flag SEC_CONTENTS | SEC_CODE viene smontato da objdump quando viene passata l'opzione -d.

Entrare in libbfd è molto più difficile, mi aspetto che il rilevamento del tipo dipenda dall'architettura, ma spero di aver dato almeno il puntatore giusto. (Probabilmente quando avere più tempo sarò scavare più in questo ed estendere la risposta) ..


Btw, se avete bisogno di uno script per filtrare le sezioni di interesse da objdump -D si potrebbe utilizzare sed, come questo :

# ------------Place section names here ---------------vvv 
objdump -D object.o | sed -rn '/Disassembly of.*\.(comment|text)/{:a;p;n;/Disassembly of/!ba}'