具有重定位但没有PIC的可执行文件中共享库的引用功能

时间:2016-01-09 20:43:06

标签: c++ gcc elf

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

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

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

我知道有可能使用数据,因此会执行R_386_COPY重定位。

那么,这可能是功能吗?如果,用哪个gcc参数?

1 个答案:

答案 0 :(得分:0)

  

这可能是函数吗?

不确定

  

如果,使用哪个gcc参数?

我所知道的ld版本没有这样做(通常这被视为错误的要做的事情)。您必须从源代码构建ld,并应用修补程序以使其按照您的意愿执行。

  

代码部分必须是可重写的

正确。

  

(原则上应该没问题)。

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

因此,虽然具有可写代码段的二进制文件可以在某些环境中运行而没有任何问题,但它不会在许多其他环境中运行。