2012-05-04 2 views
2

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

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

+0

Я, наконец, получил статическую ссылку glibc! Уф! – pythonic

ответ

4

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

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

Смежные вопросы