替换字符串后的符号查找错误

时间:2016-11-24 12:22:15

标签: c linux shared-libraries elf

我尝试更改共享库中的特定字符串,并在运行与之链接的程序后,出现此错误:

./prog: symbol lookup error: /home/user/lib/libprog.so: undefined symbol: have_qwerty, version PROG_PRIVATE

更改字符串的命令是:

sed -i "s/have_somewq/have_qwerty/g" ./libprog.so

理论上,这个应该可以工作,因为在使用该库的所有文件和整个库中都会更改此字符串。

那么这里可能出现什么问题呢? 如何修复或调试此问题?

1 个答案:

答案 0 :(得分:2)

  

sed -i“s / have_somewq / have_qwerty / g”./ libprog.so

您是否尝试使用sed更改二进制文件中的符号名称?这不会起作用。一个原因是除了符号名称之外,共享库还在专用部分中包含它们的哈希值,如果不费力,您将无法修改它们。

另请注意,该符号具有PROG_PRIVATE版本,可能意味着它不应在库外使用。