Меняю glibc, но ничего не происходит

Я хочу изменить glibc. Поэтому я скачал его версию и внес некоторые изменения в код. Например, я внес изменения в memset. Однако я не вижу никакой разницы, если я использую файл .so, созданный компиляцией (с использованием LD_PRELOAD), по сравнению с тем, когда я не делаю никаких LD_PRELOAD. memset ведет себя как обычно. Почему это так? Возможно, компилятор встраивает memset и ничего не использует из общего объекта? Я этого не понимаю. Я даже вносил изменения в printf, но все равно ничего. Почему это так. Как я могу изменить glibc (в целях тестирования), чтобы увидеть изменения?

Более того, когда я попытался изменить pthread_create (и, конечно же, LD_PRELOAded libpthread.so), введя printf( "pthread_create") в начале этой функции, я просто получил ошибку сегментации. Что здесь происходит? Также, если я проверю разницу в libc.so после внесения изменений в исходный код glibc, я не увижу разницы в произведенных версиях. Что здесь происходит. Это сводит меня с ума!


person pythonic    schedule 04.05.2012    source источник
comment
Наконец-то я отделался статическим связыванием glibc! Фу!   -  person pythonic    schedule 04.05.2012


Ответы (1)


GCC предоставляет встроенные версии нескольких функций, включая memset() и printf(). Он не связан с реализацией этих функций в glibc.

Попробуйте передать параметр компилятора -fno-builtin, чтобы запретить такое поведение.

person Frédéric Hamidi    schedule 04.05.2012