只是出于好奇,我想知道是否可以在期间重新定位一段代码
程序的执行。例如,我有一个函数,这个函数应该
每次执行后都会在内存中进行替换。我们想到了一个想法
就是使用自修改代码来做到这一点。根据网上的一些资源,自行修改
代码可以在Linux上执行,但我仍然不确定这样的动态重定位是否可能。有人有这方面的经验吗?
是的,动态重定位绝对是可能的。但是,您必须确保代码是完全独立的,或者它通过绝对引用访问全局/外部函数。如果您的代码可以完全独立于位置,这意味着它所做的唯一引用是相对于其自身的,那么您就完成了。否则,您将需要在加载时自行进行修复。
通过 GCC,您可以使用-fpic
生成位置无关的代码。通过-q
or --emit-relocs
到链接器将使其发出重定位信息。这ELF规范 http://www.skyfree.org/linux/references/ELF_Format.pdf(PDF 链接)包含有关如何使用该搬迁信息的信息;如果您不使用 ELF,则必须找到适合您的格式的文档。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)