c - 是否可以将 no-pie 可执行文件转换为没有源代码的 pie 可执行文件?
问题描述
我想使用lief将可执行文件转换为共享库,我注意到它只支持pie可执行文件。所以我想知道是否有一种方法可以将 no-pie 可执行文件转换为 pie 可执行文件。
解决方案
不,没有,除非-q
在链接时使用了模糊选项。ET_EXEC
ELF 文件针对特定的加载地址进行链接,并在其指令流中将地址引用解析并最终确定为立即数,并在其数据部分中以纯数字形式存在。这些数字指的是对象或函数的地址,而不仅仅是普通的常量数字的信息已经丢失并且从根本上无法恢复。另一方面,PIE 可执行文件在所有地址引用上都有动态重定位记录,因此可以在加载时对其进行修补,并且通常在数据段(GOT 或静态数据)中包含所有此类引用,因此文本段是纯粹的只读和可共享。
所以不,没有办法做你想做的事。
推荐阅读
- ruby-on-rails - 使用 AND 和 OR 轨道组合创建过滤器
- postgresql - 如何在 Postgres-XL 中将 SEQUENCE 设置为 DEFAULT?
- c++ - 是否可以在 C 或 C++ 中基于 JSON 动态创建 if 语句
- php - 如何在 PHP 的 apache_request_headers 中添加 HEADER
- android - 遍历可选对象列表
- python - json.dumps - 控制输出中的引用
- javascript - 在加载图像上创建 JavaScript 函数
- java - Titan Graph 数据迁移
- sql - 用于插入/更新的单表 sql 查询返回无表关系的错误,我该如何修复此语句?
- bash - 如何在当前 PowerShell 工作目录中从 PowerShell 进入 Windows-Subsystem-for-Linux (ubuntu)