c - 将具有绝对地址的符号链接到 PIC 二进制文件
问题描述
我正在创建一个由多个二进制图像(通过 python 脚本组合在一起)构建的新图像。问题是最后一个二进制图像必须用 fPIC 编译,而以前的图像不是。最后一个图像(使用 fPIC 编译的图像)重用其他二进制图像中的函数,使用--just-symbols
.
问题是,当我尝试从另一个二进制文件(由 接收的符号--just symbols
)调用函数时,符号的地址是相对的而不是绝对的,这会导致硬故障。
如何将具有绝对地址的符号链接到 PIC 二进制文件?
代码示例:
文件 fun.c 编译成 fun.elf 剥离到 fun.bin:
int fun(int a,int b)
{
print("help\r\n");
}
-fPIC
使用to 和编译的文件 fail.c --just-symbols=fun.elf
:
int fail(void)
{
fun(1,3);
}
在示例中,fail.bin 中 fun 的地址是相对的,而不是绝对的。
解决方案
所以,经过更多的研究,我发现这是不可能的。您不能强制使用 fPIC 标志编译的应用程序的 pc 不将 PIC 用于特殊符号(在我的情况下,符号来自 --just-symbols)。
我选择的解决方案实际上是解析非 PIC elf 文件并获取所需功能的地址。使用这些地址并将它们转换为所需的功能。
推荐阅读
- android - 如何从 firebase 真实数据库中获取密钥?
- java - 使用Spring Data Mongo在mongodb聚合中分组时如何获取具有非空数组字段的元素计数?
- python - 使用 http POST 调用 Google Cloud 函数 - 仅限内部流量
- java - Java - 输出行
- c# - 按钮背景边距
- google-sheets - 除了引用的单元格通过 not(isblank) 为空白之外,Arrayformula 正在整个列上扩展
- c# - Devexpress 报告:表重复 C#
- python - xlearn 预测错误给出的 mse 与函数的输出不同
- c - %s 正在跳过整个打印行 - 没有用户输入
- anaconda - 无法将 Seaborn 正确导入我的 IBM Watson-Studio