2015-03-28 29 views
6

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

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