Как мне получить исходный код eglibc в формате, который позволит пройти через исходный код с помощью gdb?
Я пытался использовать apt-get source libc6-dev
, и это работает для получения исходного кода, но я думаю, что, поскольку директивы препроцессора не были применены, номера строк, которые имеет gdb, не совпадают с исходным кодом, который я скачал , Это делает его менее полезным при попытке просмотреть исходный код и посмотреть, как работают функции в libc.
Вы можете попробовать apt-get source -d libc6-dev, и это должно дать вам источник и diff в формате deb. Затем вы можете распаковать его, и он должен передать исходные тексты в tar.gz также распаковать его. Он должен храниться в каталоге, в котором вы запускали команду apt-get.
Если вы действительно хотите пройтись по исходному тексту, я бы порекомендовал создать libc без оптимизации и без удаления двоичных файлов.
К счастью, это должно быть легко - поскольку у вас уже есть исходный код, из него можно собирать пакеты. Убедитесь, что переменная окружения DEB_BUILD_OPTIONS
содержит noopt
для получения -O0
двоичных файлов и nostrip
для хранения отладочных символов, и затем выполните обычную сборку с помощью debuild
:
sudo apt-get build-dep libc6
DEB_BUILD_OPTIONS="noopt nostrip" debuild -us -uc
соберет вам пакеты, созданные с помощью -O0
, без удаления символов отладки; затем вы можете установить их с помощью dpkg
, и gdb заберет символы отладки. В качестве дополнительного бонуса gdb также будет знать, где найти исходные файлы, поэтому вы получите списки источников.
Поскольку мы не меняли версии пакетов, при следующем запуске обновления apt заменит их локально установленные пакеты с архивными версиями.