代码段的动态重定位

2024-01-01

只是出于好奇,我想知道是否可以在期间重新定位一段代码 程序的执行。例如,我有一个函数,这个函数应该 每次执行后都会在内存中进行替换。我们想到了一个想法 就是使用自修改代码来做到这一点。根据网上的一些资源,自行修改 代码可以在Linux上执行,但我仍然不确定这样的动态重定位是否可能。有人有这方面的经验吗?


是的,动态重定位绝对是可能的。但是,您必须确保代码是完全独立的,或者它通过绝对引用访问全局/外部函数。如果您的代码可以完全独立于位置,这意味着它所做的唯一引用是相对于其自身的,那么您就完成了。否则,您将需要在加载时自行进行修复。

通过 GCC,您可以使用-fpic生成位置无关的代码。通过-q or --emit-relocs到链接器将使其发出重定位信息。这ELF规范 http://www.skyfree.org/linux/references/ELF_Format.pdf(PDF 链接)包含有关如何使用该搬迁信息的信息;如果您不使用 ELF,则必须找到适合您的格式的文档。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

代码段的动态重定位 的相关文章

  • 将列表数组中的值绑定到列表框

    任何机构都可以给出一个简短的示例 用于将列表数组中的值绑定到 c net 中的列表框 这取决于您的列表数组的情况 让我们从一个简单的示例开始 List
  • C/C++ 程序是在 CPU 上运行还是在内核上运行?

    我已经编程很多年了 但有一件事我一直不明白 有两种类型的编程语言 编译型语言和解释型语言 编译型语言首先需要编译成解释型语言 然后才能执行 例如 C C 需要先编译为机器语言 然后才能执行 我的问题来了 谁真正运行已编译的 C C Wind
  • 为什么在 OpenCV 中访问该矩阵时出现内存错误?

    我只是想写入给定大小的矩阵 当我在 Valgrind 中运行该程序时 出现内存错误 如下所示 主要 cpp include
  • 如何自定义 ASP.Net Core 模型绑定错误?

    我只想从我的 Web API Asp net Core 2 1 返回标准化的错误响应 但我似乎不知道如何处理模型绑定错误 该项目刚刚从 ASP NET Core Web 应用程序 gt API 模板创建 我有一个简单的操作定义为 Route
  • Visual Studio 2015 C# 找不到参考

    我在使用 Visual Studio 2015 和 C 时遇到了问题 在同一解决方案中添加对其他项目的引用时 Visual Studio 找不到所有类 例如 我创建了一个单元测试项目 我添加了对我创建的通信项目的引用 库中有 10 个类 但
  • std::async 参数的生命周期是多少?

    看来函数的参数是通过std async分享未来的生活 include
  • 我可以将特定警告视为错误吗?

    以下是我有时在学生代码中看到的模式的简化版本 bool foobar int a int b if a lt b return true 当然 真正的代码要复杂得多 Visual Studio 报告警告 C4715 并非所有控制路径都会返回
  • C++ Linux GCC 应用程序中的 GUID

    我有很多服务器运行这个 Linux 应用程序 我希望他们能够生成一个碰撞概率较低的 GUID 我确信我可以从 dev urandom 中提取 128 个字节 这可能没问题 但是有没有一种简单易用的方法来生成与 Win32 更等效的 GUID
  • memccpy 返回比 src 起始地址更低的内存地址

    我有一个学校项目 我必须重新编码memccpy 功能 我使用 2 个程序来检查我的代码是否正常工作 第一个是只有一个主程序的小程序 第二个程序是另一个学生开发的 可以找到here https github com yyang42 mouli
  • Docker 不遵循构建目录中的符号链接

    我正在对一个应用程序进行 Docker 化 其中涉及通过 Clang 将二进制文件与其他 C 文件链接 我们维护二进制文件的符号链接版本 因为它们在整个代码库中使用 我的 Docker 构建目录包含整个代码库 包括源文件以及这些源文件的符号
  • 在 OpenGL 中使用不同的着色器程序?

    我必须在 OpenGL 中针对不同的对象使用两个不同的着色器程序 我发现我必须使用glUseProgram 在不同的着色器程序之间切换 但对此没有太多信息 鉴于我有两个用于不同对象的不同着色器程序 如何为每个着色器程序生成和绑定 VAO 和
  • C++ 中类型信息何时向后流动?

    我刚刚看了 Stephan T Lavavej 的演讲CppCon 2018关于 类模板参数推导 在哪里某个点 https youtu be H ut6j1BYU t 941他顺便说 在 C 中 类型信息几乎永远不会向后流动 我不得不说 几
  • Xamarin.Android JmDNS 绑定问题

    我开始研究 Xamarin Android 的 JmDNS 绑定 我设法构建了绑定 但无法从代码中引用它 https github com ytn3rd monodroid bindings tree master JmDNS https
  • 如何明智地解释这个编译器警告?

    当我执行这段代码时question https stackoverflow com a 51056490 2411320 我收到这个警告 warning format d expects argument of type int but a
  • std::iota 的 iota 代表什么?

    我假设 i 是增量 a 是分配 但我无法弄清楚或找到答案 而且 它看起来与非标准非常相似itoa我认为这很令人困惑 C iota is not an acronym or an initialism It is the word iota
  • 不兼容的指针到字符转换

    我正在编写一个程序 将卡片值写入 52 个点字符的多维数组中 该程序是一个测试数组 稍后我将其作为函数写入主程序中 在程序中 我通过以下方式初始化 for 循环计数0通过51 我用一个switch语句调制13将卡牌值分配给数组点 但是 我收
  • WPF DataGrid 选定项

    我有一个 DataGrid 用户可以通过在最后一行输入数据来添加项目 我还有一个按钮可以删除当前选定的项目 但是 当选择最后一行 空 用于添加新项目 时 最后选定的项目将保留在 SelectedItem 中 因此 如果我打开窗口 选择最后一
  • 为什么 GCC 在堆栈上压入额外的返回地址?

    我目前正在学习汇编的基础知识 在查看 GCC 6 1 1 生成的指令时遇到了一些奇怪的情况 这是来源 include
  • 频繁插入已排序的集合

    我已经对集合 列表 进行了排序 并且我需要始终保持其排序 我目前在我的集合上使用 List BinarySearch 然后在正确的位置插入元素 我也尝试过在每次插入后对列表进行排序 但性能不可接受 有没有一种解决方案可以提供更好的性能 也许
  • 清理 TPL 中的 CallContext

    根据我使用的是基于 async await 的代码还是基于 TPL 的代码 我在逻辑清理方面得到了两种不同的行为CallContext 我可以设置和清除逻辑CallContext如果我使用以下异步 等待代码 正如我所期望的 class Pr

随机推荐

  • ajax调用成功后重新初始化Slick js

    我正在使用 Slick 进行轮播实现 并且在页面加载时一切正常 我想要实现的是 当我进行 Ajax 调用来检索新数据时 我仍然需要 slick 轮播实现 但此刻我失去了它 我已将对 slick 的调用放入函数中 function slick
  • Zend 中的 Flash Messenger 类型

    是否可能或我如何为 Zend 中的 FlashMessage 指定类型 例如 This is a Success message this gt helper gt FlashMessenger You are successfully c
  • flutter doctor - CocoaPods 已安装但无法工作

    使用 zsh 用于在 bash 中工作酿造医生 您的系统已准备好酿造 颤振医生给出了这个错误 Xcode develop for iOS and macOS Xcode 12 2 CocoaPods installed but not wo
  • 代码存储库最佳实践[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使用标记、颜色和 lw 选项绘制多个数据框列

    虽然线图效果很好 但我正在寻找一种更有效的方法来编写此代码并缩短它 什么被认为是 最佳实践 新人正在做基础工作 我觉得我应该使用循环来分配所有 y 值 也许还有绘图 数据说明 1990 2018 年时间序列数据 包含大陆电力消耗 TWH f
  • 创建操作的自定义 POST 路由未启动

    解释上下文 puts I am learning Rails building a simple forum application puts I am pretty satisfied to where I got so far but
  • 初始化语法

    我喜欢 C 3初始化语法 https learn microsoft com en us dotnet csharp programming guide classes and structs how to initialize objec
  • 如何强制 float 和 int 有小数点或尾随零

    我正在尝试通过 RS232 与机器连接 并且机器要求所有输入都有小数点分隔符 否则它会采用小数点位置 例如 如果我发送25它将解释为0 025 but 25 000 or 25 将被正确接收为25 000 I tried Math Roun
  • 对于C++ sort(),如何将参数传递给自定义比较函数?

    我想使用标准排序函数根据与另一个点的距离 例如它们的重心 对点进行排序 我知道我可以编写一个自定义比较函数 但我不知道如何向它传递参数 我希望它是线程安全的 所以我不想将参数存储在一个中心位置 有没有办法将附加参数传递给自定义比较函数 He
  • JavaScript - XMLHttpRequest、访问控制允许来源错误

    我正在尝试将 XMLHttpRequest 发送到粘贴站点 我正在发送一个包含 api 所需的所有字段的对象 但我不断遇到此问题 我读过这个问题 我想 httpReq setRequestHeader Access Control Allo
  • 未找到方法定义...使用 Xcode 自动存根?

    在询问之前我不想放弃 因为这是任何 Java Net IDE 中的基本功能 编译器告诉我 Incomplete implementation of class Method definition for someMethod not fou
  • 在 kustomize 中选择性应用名称前缀/名称后缀

    目前我们正在使用 HOME bin kustomize edit set nameprefix prefix1 但它正在向我们的所有资源 例如 deployment yaml 和 service yaml 添加 nameprefix 我们只
  • 无法使用 C++ 连接到 PostgreSQL

    我正在尝试在我的 Mac 上运行 PostgreSQL PostgresQL 本身工作正常 我可以创建数据库和表之类的东西 但是当我尝试使用 C 连接到 PostgreSQL 时 如下所示 include
  • Git 弄乱了我的文件,在某些地方显示中文字符

    免责声明 我所说的 Git 是指 我 搞砸了 Earlier https stackoverflow com questions 17248795 git thinks ini saved in unicode files are bina
  • 如何使用 R 以编程方式提取/解压 .7z (7-zip) 文件

    我正在尝试自动提取许多使用 7 zip 压缩的文件 我需要自动化这个过程 因为a 我想解锁很多年的数据 b 我想与其他人共享我的代码并防止他们手动重复该过程 我的计算机上安装了 WinRAR 和 7 zip 我可以使用任一程序轻松地单独打开
  • 构建和验证 Gigya 签名

    我编写了一个方法 根据 Gigya 的指定时间戳和 UID 来验证 gigya 签名构建签名的说明 http developers gigya com 030 Gigya Socialize API 2 0 010 Developer Gu
  • 可能是C# 4.0编译器错误,其他人可以验证吗?

    由于我不知道究竟是哪一部分触发了错误 所以我不完全确定如何更好地标记它 这个问题是SO问题的副产品C 代码似乎以无效的方式进行优化 导致对象值变为 null https stackoverflow com questions 3379894
  • 是否有解决方法可以在 Ruby 中打开包含下划线的 URL?

    我正在使用 open uri 来打开 URL resp open http sub domain domain com 如果它包含下划线 我会收到错误 URI InvalidURIError the scheme http does not
  • 如何在 C++/CLI 接口中声明默认索引属性

    如何在 C CLI 接口中声明默认索引属性 请原谅使用命名空间的重复 完全限定符号 因为我刚刚学习 C CLI 并且希望确保 C 和 C 之间不会发生语言原语的意外混淆 Code is public interface class ITes
  • 代码段的动态重定位

    只是出于好奇 我想知道是否可以在期间重新定位一段代码 程序的执行 例如 我有一个函数 这个函数应该 每次执行后都会在内存中进行替换 我们想到了一个想法 就是使用自修改代码来做到这一点 根据网上的一些资源 自行修改 代码可以在Linux上执行