我想使用lief将可执行文件转换为共享库,并且我注意到它仅支持Pie可执行文件。因此,我想知道是否有一种方法可以将无饼可执行文件转换为饼可执行文件。
答案 0 :(得分:3)
不,没有,除非在链接时使用了晦涩的-q
选项。 ET_EXEC
ELF文件被链接到一个特定的加载地址,并且在其指令流中的地址引用中已解析并最终确定为地址引用,在其数据部分中的地址为纯数字。这些数字指的是对象或函数的地址,而不仅仅是普通的常数,已经已经丢失,并且从根本上是无法恢复的。另一方面,PIE可执行文件在所有地址引用上都具有动态重定位记录,以便可以在加载时对其进行修补,并且通常在数据段(GOT或静态数据)中具有所有此类引用,从而使文本段纯粹是只读且可共享。
所以,没有办法做你想做的事。