gpt4 book ai didi

复制 glibc 库

转载 作者:IT王子 更新时间:2023-10-29 01:27:38 26 4
gpt4 key购买 nike

我下载了 glibc 源代码,修改了标准库的某些部分,然后使用 LD_PRELOAD 将修改后的标准库(以 .so 文件的形式)用于我的程序。但是,当我将该 .so 文件复制到另一台计算机并尝试在该计算机上使用 LD_PRELOAD 运行相同的程序时,出现了段错误。

请注意,两台计算机都有 x86-64 处理器。此外,两台计算机都安装了 gcc 4.4。尽管未运行它的计算机除了 gcc 4.4 之外还安装了 gcc 4.1.2。但是,一个运行的是 Ubuntu 10.04(我在其中编译),而另一个运行的是 CentOS 5。这是段错误的原因吗?我怎么解决这个问题?请注意,我在装有 CentOS 5 的计算机上没有管理权限。

最佳答案

当您 LD_PRELOAD C 库时,我相信除了默认的 C 库之外,您还会加载它。当它们是完全相同的版本时,所有符号都匹配,并且您的符号优先。所以它有效。当它们是不同的版本时,您可能会在每个符号的基础上进行混合。

此外,NSS(名称服务开关,例如/etc/nsswitch.conf 中的所有内容)API 不稳定。这些模块与主 libc.so 是分开的,但是当程序执行用户 ID 到用户名映射时动态加载。加载错误的版本(因为你复制了 libc.so)会造成各种不良后果。

此外,Ubuntu 可能正在使用 eglibc 和 CentOS glibc。因此,您可能正在查看 glibc 的不同分支。

如果您的 LD_PRELOAD 库包含您实际需要覆盖的符号,并将它们覆盖到可能的最小数量(例如,如果可能,调用覆盖的函数),那么您的库有一个 < em>大大便携的可能性更高。

有关如何执行此操作的示例,请参阅(例如)fakeroot .

如果您对 libc 的更改如此之多以至于您唯一的选择就是覆盖所有它,那么 (a) 您正在做一些非常奇怪的事情; (b) 您可能想使用 LD_LIBRARY_PATH,而不是 LD_PRELOAD;查看ld.so(8) manpage了解详情。

关于复制 glibc 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10419489/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com