c - 替换字符串后符号查找错误

标签 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

理论上,无论如何,这个应该起作用,因为这个字符串在使用这个库的所有文件和整个库中都发生了变化。

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

最佳答案

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

您是否尝试使用 sed 更改二进制文件中的符号名称?这是行不通的。原因之一是,除了符号名称之外,共享库还在专用部分中包含其哈希值,您将无法在不付出大量努力的情况下对其进行修改。

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

关于c - 替换字符串后符号查找错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40786327/

相关文章:

C++ 程序未正确链接到 .so 文件

c - 将所有出现的 % 替换为 %% ?需要一个函数吗?

c - 小C指针问题

c - C 字符串的轻量级(准随机)整数指纹

linux - 从记录的文件名中删除空格

go - 如何在 Go 中调用 linux 共享库函数?

c - 是否可以可移植地定义一个接受任意数量参数的函数?

linux - 批量编写远程 SSH 命令脚本的最佳方式 (Windows)

c++ - 如何理解 uart 端口收到了整个消息?

python - gdb:中断由python加载的共享库