Как я могу использовать отладочную версию glibc для сборки программы?

я хочу что-то отладить в glibc, поэтому я хочу использовать отладочную версию glibc для сборки программы. если я просто использую gcc -o test test.c для сборки программы,

apt-get установить libc6-dbg

apt-получить исходный код libc6-dev

когда я отлаживал программы, некоторым val сказали, что они оптимизированы. и EIP всегда прыгает назад.

как я могу отлаживать отладочную версию glibc.


person turing.huang    schedule 18.02.2016    source источник
comment
Пробовали компилировать с -g ?   -  person user253751    schedule 18.02.2016
comment
@immibis: Это не делает то, о чем просит ОП.   -  person Nate Eldredge    schedule 19.02.2016
comment
на самом деле это не отдельная версия, а символы отладки для основной библиотеки. поскольку основная библиотека построена с оптимизацией, да, вполне ожидаемо, что некоторые функции встроены и иначе оптимизированы. вы можете захотеть скомпилировать libc с нуля с флагом -g, если вам нужен неоптимизированный код, но даже в этом случае есть некоторые встроенные строки asm.   -  person user3159253    schedule 19.02.2016


Ответы (1)


Предупреждение: я использую Fedora, но у нее аналогичный механизм.

Пакет отладки загружает дополнительный файл с отладочной информацией, которую вы получили бы, если бы скомпилировали с -g для glibc.

Но этот пакет соответствует стандартной сборке, созданной с оптимизацией (например, -O2).

Именно оптимизация вызывает поведение, которое вы видите. Таким образом, "покрытие" gdb будет неравномерным.

Вам нужна версия glibc, построенная из -gdwarf-2 и -O0. Насколько я знаю, вам придется получить это, самостоятельно собрав glibc из исходников.

Вероятно, вам придется запустить скрипт configure и выбрать для сборки параметры -g и -O. Затем запустите make. Точные детали должны быть где-то в исходной документации [или в Интернете].

Затем вам придется [принудительно] связать вашу программу с версией, созданной из исходного кода.

person Craig Estey    schedule 18.02.2016
comment
GLIBC не может быть собран с -O0. Требуется оптимизация. - person Employed Russian; 19.02.2016
comment
очень полезно для меня, большое спасибо! и -O1 мне подходит :) - person turing.huang; 19.02.2016