假设你有一个函数foo()编译成一个在Unix上运行的程序。
当程序运行时,可以通过动态加载包含foo()修改版本的目标文件来“替换”函数foo吗?
在我过去使用的嵌入式系统上,我们可以取消保护文本段,然后基本上“修补”foo()的地址以指向新修改的foo()。
它在客户站点上偶尔用于调试并具有许多特殊约束。
这在Unix上可行吗?
答案 0 :(得分:1)
我想,这取决于环境。我知道热插拔生产代码在Erlang模块中是微不足道的,在Ruby中也不算太难。 C可能是一种不同的动物。
答案 1 :(得分:1)
是。毕竟,这就像gdb之类的调试器一样。
答案 2 :(得分:0)
缺点是肯定的,当然这是可能的。问题应该是,“有多难?”
你可以加载&在Linux和Linux上卸载所有你想要的共享库(.so& .DLL)。视窗。 UNIX的具体变体,我不确定。这将是实现目标的最简单方法。
如果您不介意弄脏手,您可以随时修补代码段以跳转到堆上的其他位置。我不推荐它。