c - 是否可以在没有源代码的情况下将 no-pie 可执行文件转换为 pie 可执行文件?

标签 c

我想使用 lief 将可执行文件转换为共享库,我注意到它只支持 pie 可执行文件。所以我想知道是否有一种方法可以将 no-pie 可执行文件转换为 pie 可执行文件。

最佳答案

不,没有,除非在链接时可能使用了模糊的 -q 选项。 ET_EXEC ELF 文件链接到特定的加载地址,地址引用在其指令流中解析并最终确定为立即数,在其数据部分中确定为纯数字。这些数字指的是对象或函数的地址,而不仅仅是普通常量的信息已经丢失,并且根本无法恢复。另一方面,PIE 可执行文件在所有地址引用上都有动态重定位记录,以便可以在加载时对其进行修补,并且通常在数据段(GOT 或静态数据)中包含所有此类引用,因此文本段是纯粹的只读且可共享。

所以不,没有办法做你想做的事。

关于c - 是否可以在没有源代码的情况下将 no-pie 可执行文件转换为 pie 可执行文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56745928/

相关文章:

c++ - 是否有自动检测我应该编译哪些 .cpp 源文件的方法(取决于#include *.h)

c - 为什么 sizeof ("") 等价于 1 而 sizeof(NULL) 等价于 c 语言中的 4?

c - 用整数表示 float

c++ - 在 C 中改变 const 值

c - 检测截止时间线程抢占

c - 当函数调用 self 时,递归函数如何处理函数内部的局部变量?

c - SIGCHLD信号处理

c - 获取排序数组中每个单词的计数

c - if ((float)(int_one && int_two) == (float)int_one && (float)int_two) 总是计算 "false"

c - 0-1 Knapsack 的蛮力实现