改变glibc但没有任何反应

时间:2012-05-04 15:56:26

标签: c linux gcc glibc

我想修改glibc。所以我已经下载了它的一个版本并对代码进行了一些更改。例如,我对memset进行了更改。但是,如果我使用编译生成的.so文件(使用LD_PRELOAD),而不使用任何LD_PRELOAD,我认为没有任何区别。 memset的行为与它一样。为什么会这样?这可能是编译器内联memset而不是使用共享对象中的任何东西吗?我不明白这一点。我甚至对printf进行了更改,但仍然没有。为什么会这样。如何修改glibc(用于测试目的),以便我看到更改?

此外,当我尝试通过在该函数的开头引入printf( "pthread_create")来更改pthread_create(和当前LD_PRELOAded libpthread.so)时,我只是得到了一个分段错误。这里发生了什么?另外,如果在glibc源代码中进行更改后检查libc.so中的差异,我发现生成的版本没有区别。这里发生了什么。这让我疯了!

1 个答案:

答案 0 :(得分:4)

GCC提供several functions的内置版本,包括memset()printf()。它没有链接到glibc对这些函数的实现。

尝试传递-fno-builtin编译器选项以禁止此行为。