Intereting Posts
Самый быстрый и эффективный способ удаления строк, содержащих строки (строки, перечисленные в другом текстовом файле) Проверьте, подключен ли сетевой кабель, не подключая интерфейс Использование emacsclient с пользовательскими emacs в $ PATH Что такое индексный дескриптор, определенный POSIX? / home Read Only после выхода из заставки (прерывистый) Как получить последнюю часть http-ссылки в Bash? Распечатка стандартных предопределенных макросов C / GCC в терминале Использование меток в терминале / терминаторе для упрощения навигации установить время аппаратного обеспечения Перенаправить stderr из уже запущенного скрипта Как я могу позволить другому пользователю подключиться к моему сеансу с помощью X11vnc? Обновление PATH не остается после перезагрузки Существуют ли обстоятельства, при которых ld игнорирует LD_LIBRARY_PATH? Где загрузить RPM? Как выполнить команду на каждом входе, учитывая список входных данных

Какой инструмент можно использовать для просмотра объектного файла?

Я читаю старую книгу о компоновщиках и загрузчиках, и у нее есть образы объектного кода. Но я не могу понять, какие инструменты используются для отображения содержимого этих файлов. Я был бы признателен, если бы кто-нибудь мог указать на инструмент.

Вот код C и соответствующее отображение объектных файлов.

Исходный файл mc :

 extern void a(char *); int main(int argc, char **argv) { static char string[] = "Hello, world!\n"; a(string); } 

Исходный файл ac :

 #include <unistd.h> #include <string.h> void a(char *s) { write(1, s, strlen(s)); } 

Код объекта для mo :

 Sections: Idx Name Size VMA LMA File off Algn 0 .text 00000010 00000000 00000000 00000020 2**3 1 .data 00000010 00000010 00000010 00000030 2**3 Disassembly of section .text: 00000000 <_main>: 0: 55 pushl %ebp 1: 89 e5 movl %esp,%ebp 3: 68 10 00 00 00 pushl $0x10 4: 32 .data 8: e8 f3 ff ff ff call 0 9: DISP32 _a d: c9 leave e: c3 ret ... 

Код объекта для ao :

 Sections: Idx Name Size VMA LMA File off Algn 0 .text 0000001c 00000000 00000000 00000020 2**2 CONTENTS, ALLOC, LOAD, RELOC, CODE 1 .data 00000000 0000001c 0000001c 0000003c 2**2 CONTENTS, ALLOC, LOAD, DATA Disassembly of section .text: 00000000 <_a>: 0: 55 pushl %ebp 1: 89 e5 movl %esp,%ebp 3: 53 pushl %ebx 4: 8b 5d 08 movl 0x8(%ebp),%ebx 7: 53 pushl %ebx 8: e8 f3 ff ff ff call 0 9: DISP32 _strlen d: 50 pushl %eax e: 53 pushl %ebx f: 6a 01 pushl $0x1 11: e8 ea ff ff ff call 0 12: DISP32 _write 16: 8d 65 fc leal -4(%ebp),%esp 19: 5b popl %ebx 1a: c9 leave 1b: c3 ret 

Вы можете использовать objdump . См. Man objdump . Например, опция -d для дизассемблирования (есть много вариантов):

 objdump -d ao 

Другие полезные программы включены в binutils .