修补ELF,并以最小的字节数更改

时间:2018-11-22 12:36:34

标签: c patch elf

问题定义: 我需要修补一个elf文件。这个elf文件是从我开发的可用源代码中产生的。我也有一个链接器文件,这是我的目标的标准示例。

挑战是在添加新的代码行时,将elf文件中的更改(字节移位)保持在最低限度。当我计算原始和修补的elf文件之间的字节差时,希望第一次出现字节移位(由于出现新的代码行)是在elf文件的末尾附近。

因此,必须添加新的文本和数据部分以进行修补,这是必须的! 但是这些部分也位于elf文件的末尾。

这是我的测试组合:

什么有效;

当我向任何功能添加新功能时,我将在新的源文件中重写此功能。并将此函数添加到名为patchText(在链接器文件中定义)或任何其他内容的新部分中。最后,我手动更改函数调用指令,它起作用了!但这是手动的:(有什么方法可以自动执行此操作吗?

什么不起作用;

1)__attribute _((弱))选项->当我将补丁代码放在.bss或.data节之后时,链接器将创建两个可执行的PT_LOAD段。并且当我运行该程序时,它不起作用!因为我的补丁功能符号无法解析。 如果我使用“弱”属性而不添加新部分,则它可以工作。 那么对此有任何解释或评论吗?有什么问题吗?还是有可能?

2)-Wl,-wrap,symboname选项:与“弱”中的问题相同。

谢谢。

0 个答案:

没有答案