Obecnie buduję gołą konstrukcję wykonaną z metalu, która zawiera specjalne sekcje zawierające kod. Jednak gdy wykonuję numer objdump -d
otrzymuję kod tylko dla sekcji .text
i .init.text
. Strona podręcznika pod numerem objdump
mówi tylko, że "rozbiera tylko te sekcje, które powinny zawierać instrukcje" podczas korzystania z opcji -d
. Jakie są sekcje i jak objdump
powiedzieć, które sekcje do odkodowania? Wiem, że mogę również użyć opcji -D
, aby uzyskać pełne dekodowanie wszystkich sekcji, ale zazwyczaj jest to znacznie więcej niż potrzebuję.Którą sekcję domyślnie demontuje objdump
6
A
Odpowiedz
5
objdump
używa wewnętrznie libbfd
, aby uzyskać informacje o sekcjach. objdump
przekazuje wywołanie zwrotne do bfd_map_over_sections()
, które wywołuje wywołanie zwrotne w każdej sekcji. Po wywołaniu, libbfd
przekazuje asection *
do wywołania zwrotnego, które ma członka type
. Jeśli typ zawiera flagi SEC_CONTENTS | SEC_CODE
, zostanie on zdemontowany przez objdump
po przekazaniu opcji -d
.
Wejście do libbfd
jest dość trudne, spodziewam się, że wykrywanie typu zależy od architektury, ale mam nadzieję, że dałem ci co najmniej odpowiedni wskaźnik. (Prawdopodobnie gdy mając więcej czasu będę kopać bardziej w to i przedłużyć odpowiedź) ..
Btw, jeśli potrzebujesz skryptu odfiltrować sekcje zainteresowania ze objdump -D
można użyć sed
, jak to :
# ------------Place section names here ---------------vvv
objdump -D object.o | sed -rn '/Disassembly of.*\.(comment|text)/{:a;p;n;/Disassembly of/!ba}'