如何修补实时运行的Unix代码

时间:2010-02-02 01:26:05

标签: unix code-patching

假设你有一个函数foo()编译成一个在Unix上运行的程序。

当程序运行时,可以通过动态加载包含foo()修改版本的目标文件来“替换”函数foo吗?

在我过去使用的嵌入式系统上,我们可以取消保护文本段,然后基本上“修补”foo()的地址以指向新修改的foo()。

它在客户站点上偶尔用于调试并具有许多特殊约束。

这在Unix上可行吗?

3 个答案:

答案 0 :(得分:1)

我想,这取决于环境。我知道热插拔生产代码在Erlang模块中是微不足道的,在Ruby中也不算太难。 C可能是一种不同的动物。

答案 1 :(得分:1)

是。毕竟,这就像gdb之类的调试器一样。

答案 2 :(得分:0)

缺点是肯定的,当然这是可能的。问题应该是,“有多难?”

你可以加载&在Linux和Linux上卸载所有你想要的共享库(.so& .DLL)。视窗。 UNIX的具体变体,我不确定。这将是实现目标的最简单方法。

如果您不介意弄脏手,您可以随时修补代码段以跳转到堆上的其他位置。我不推荐它。