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