gpt4 book ai didi

c - 代码段的动态重定位

转载 作者:IT王子 更新时间:2023-10-28 23:54:37 24 4
gpt4 key购买 nike

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

最佳答案

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

在 GCC 中,您可以使用 -fpic 生成与位置无关的代码。将 -q--emit-relocs 传递给链接器将使它发出重定位信息。 ELF specification (PDF 链接)有关于如何使用该搬迁信息的信息;如果您不使用 ELF,则必须找到适合您的格式的文档。

关于c - 代码段的动态重定位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2313048/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com