В Linux, как исходный код C ++ становится исполняемыми файлами или статическими / динамическими библиотеками.И как программа загружается в память при запуске - PullRequest
1 голос
/ 29 февраля 2012

Я знаю, что исходный код можно скомпилировать и связать с общей / статической библиотекой или исполняемыми файлами ELF. И когда программа запускается, она загружается в память и создает образ процесса в соответствии с форматом ELF. Но я не уверен, как программы загружают общие библиотеки. Как компоновщик ищет символы во внешних библиотеках и как работает архив .a. Что еще я должен знать, если программа работает на 64-битной ОС?

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

Заранее спасибо.

Я думаю, что мой вопрос можно описать так:

В Linux, Как исходный код C ++ становится исполняемыми файлами или статическими / динамическими библиотеками. И как программа загружается в память при запуске. В БОЛЬШИХ подробностях!

А сколько инструментов я могу использовать для проверки / манипулирования двоичными файлами Linux (исполняемыми файлами и библиотеками)? Я знаю некоторых как «nm» «readelf».

Ответы [ 3 ]

2 голосов
/ 29 февраля 2012
1 голос
/ 29 февраля 2012

Для начала:

man-страниц для чтения: ld.so, ld, ar, gcc

утилиты: readelf, nm, ldd, objdump, c ++ Filt, GDB

32 против 64-битного примечания: выполните readelf -a для 32-битных и 64-битных версий одной и той же программы и разведите выходные данные.Обратите внимание на разницу между «Запросом интерпретатора программы» /lib/ld-linux.so.2 и /lib64/ld-linux-x86-64.so.2.

...