我想使用 lief 将可执行文件转换为共享库,我注意到它只支持 pie 可执行文件。所以我想知道是否有一种方法可以将 no-pie 可执行文件转换为 pie 可执行文件。
最佳答案
不,没有,除非在链接时可能使用了模糊的 -q
选项。 ET_EXEC
ELF 文件链接到特定的加载地址,地址引用在其指令流中解析并最终确定为立即数,在其数据部分中确定为纯数字。这些数字指的是对象或函数的地址,而不仅仅是普通常量的信息已经丢失,并且根本无法恢复。另一方面,PIE 可执行文件在所有地址引用上都有动态重定位记录,以便可以在加载时对其进行修补,并且通常在数据段(GOT 或静态数据)中包含所有此类引用,因此文本段是纯粹的只读且可共享。
所以不,没有办法做你想做的事。
关于c - 是否可以在没有源代码的情况下将 no-pie 可执行文件转换为 pie 可执行文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56745928/