2

我正在尝试分析我们的共享库,但是每当我设置了环境变量 LD_PROFILE 时,我都会得到“PLTREL not found in object”。是什么赋予了?我是否缺少某种链接器标志或什么?互联网上似乎没有关于此的信息。sprof 的手册页长约 10 个字。

4

2 回答 2

2

根据Google Groups 上未回答的问题,您似乎不是第一个遇到此问题的人。

我认为 pltrel 意味着plt- relative ;在一些ELF 设计说明中,

在代码段中创建了一个 .plt 部分,它是一个函数存根数组,用于处理库调用的运行时解析。

还有一点

我要提到的下一部分是 .plt 部分。这包含我们调用共享库中的函数时使用的跳转表。默认情况下,.plt 条目全部由链接器初始化,不指向正确的目标函数,而是指向动态加载器本身。因此,第一次调用任何给定函数时,动态加载程序会查找该函数并修复 .plt 的目标,以便下次使用此 .plt 插槽时,我们调用正确的函数。进行此更改后,动态加载程序会调用该函数本身。

在我看来,共享库的编译或组装方式存在问题。希望对 elf PLT 部分的更多搜索能让您走上正轨。

于 2009-08-06T17:58:39.617 回答
0

发现可能与您相关:

LD_AUDIT 的已知问题

➢ LD_AUDIT 不适用于没有代码的共享库。

➢ 示例 ICU-4.0 “libicudata.so”</p>

➢ 错误:“no PLTREL found in object /usr/lib/libicudata.so.40”</p>

➢ 通过 sed'ing -nostdlib etc away 修补 libicudata 后重新编译 sed -i -- "s/-nodefaultlibs -nostdlib//" config/mh-linux

似乎同样适用于 LD_PROFILE

于 2014-01-09T17:36:34.240 回答