可执行文件中共享库的引用函数,带有重定位,但没有PIC
Reference function of shared library in executable with relocations but without PIC
我想知道是否有可能构建&使用共享对象链接可执行文件,使其不使用PIC(因此是PLT),而是加载时重新定位。
我认为如果这是可能的,代码部分必须是可重写的(主体应该没有问题)。
如果我尝试不使用额外的gcc参数,它将使用PIC(通常,为了创建PIC共享库,我必须添加-fPIC)。
我知道数据是可能的,在这种情况下执行R_386_COPY重定位。
那么,这对函数来说可能吗?如果,使用哪些gcc参数?
这对函数来说可能吗?
当然。
如果,使用哪些gcc参数?
据我所知,ld
的任何版本都不会做到这一点(因为通常认为这是错误的)。您必须从源代码构建ld
,并应用补丁使其能够执行您想要的操作。
代码段必须是可重写的
正确。
(原则上应该没有问题)。
许多环境(例如SELinux
)禁止可写和可执行映射,因为这样的映射非常不安全。
因此,虽然带有可写代码的二进制部分在某些环境中运行时不会出现问题,但在其他许多环境中则不会运行。
相关文章:
- 重新定位图像时如何前进到下一个内存块
- 流填充字符的默认定位
- 通过Python Distutils(用于Python C扩展)使用可重定位的设备代码编译CUDA代码
- 为什么gmp会在这里与"invalid next size"重新定位一起崩溃?
- NS3 - python.h 文件无法定位编译错误
- 设置我的应用程序 API 感知并防止系统使其模糊和错误定位
- 静态链接启用 PIC 的库时出现链接器 PIC 错误
- GLEW 未在 MSYS2 上定位 OpenGL 函数
- c++ 链接器错误"针对'.rodata.str1.1'的重新定位R_X86_64_32"链接 CXX 共享库 libsrt.so
- 如何忽略32位整数中的特定位
- 如何在C++中使用光标定位
- 使用 stdio.h 重新定位和重命名文件C++
- R 包安装错误:重新定位 0 具有无效的符号索引 11
- 对于可重定位的多平台安装,理想的 cmake 安装目录结构是什么?
- 不能使用使用 lib*.a 的 CDT ---对符号 .. 的重新定位R_X86_64_32S
- 如何在VS2015中重新定位VS2017解决方案?
- 使用 for_each 和 lambda 销毁已定位的对象
- 在"for loop"中使用GOTOXY定位
- 是否可以为虚幻引擎/Unity制作64位定位系统?
- 可执行文件中共享库的引用函数,带有重定位,但没有PIC