可执行文件中共享库的引用函数,带有重定位,但没有PIC

Reference function of shared library in executable with relocations but without PIC

本文关键字:定位 PIC 引用 函数 可执行文件 共享      更新时间:2023-10-16

我想知道是否有可能构建&使用共享对象链接可执行文件,使其不使用PIC(因此是PLT),而是加载时重新定位。

我认为如果这是可能的,代码部分必须是可重写的(主体应该没有问题)。

如果我尝试不使用额外的gcc参数,它将使用PIC(通常,为了创建PIC共享库,我必须添加-fPIC)。

我知道数据是可能的,在这种情况下执行R_386_COPY重定位。

那么,这对函数来说可能吗?如果,使用哪些gcc参数?

这对函数来说可能吗?

当然。

如果,使用哪些gcc参数?

据我所知,ld的任何版本都不会做到这一点(因为通常认为这是错误的)。您必须从源代码构建ld,并应用补丁使其能够执行您想要的操作。

代码段必须是可重写的

正确。

(原则上应该没有问题)。

许多环境(例如SELinux)禁止可写和可执行映射,因为这样的映射非常不安全。

因此,虽然带有可写代码的二进制部分在某些环境中运行时不会出现问题,但在其他许多环境中则不会运行。