比如要对A函数打补丁,A函数修改完为B;而A的调用者为C,D,E和F
打补丁时直接把C,D,E和F里面A修改成B是不太现实的。
可以这样处理。在A函数第一条指令前加一条异常(非法)指令。
当C调用A时,会触发SIGILL异常信号,在SIGILL信号异常处理函数里面修正C里面A的地址为B,并执行B。这样C第二次调用A的时候地址已经修改成了B。D,E和F也是同理,第一次修正执行,后续直接执行。
别人的文章
linux 下C程序热补丁技术的原理和实现——要求
http://blog.csdn.net/chgaowei/article/details/5955345
动态替换Linux内核函数(powerpc版)
http://blog.chinaunix.net/uid-14327709-id-3237811.html