2

我想修改 glibc。所以我下载了它的一个版本并对代码进行了一些更改。例如,我对memset. 但是,如果我使用编译生成的 .so 文件(使用 LD_PRELOAD)与不执行任何 LD_PRELOAD 时相比,我看不出有任何区别。memset 的行为就像它一样。为什么呢?是不是编译器正在内联 memset 而没有使用共享对象中的任何内容?我不明白这一点。我什至对 printf 进行了更改,但仍然没有。为什么呢。如何修改 glibc(用于测试目的),以便我看到变化?

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

4

1 回答 1

4

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

尝试传递-fno-builtin编译器选项来禁止这种行为。

于 2012-05-04T16:03:29.400 回答