Linux上ELF64二进制文件的静态修补
我有一个静态可执行ELF64二进制文件。我想覆盖和更改某些函数的处理。这将导致添加新函数。现在我需要用新的处理来修补这个可执行文件 我知道这不是一个新问题,但我找不到任何有效的结论:Linux上ELF64二进制文件的静态修补,linux,static,binary,instrumentation,Linux,Static,Binary,Instrumentation,我有一个静态可执行ELF64二进制文件。我想覆盖和更改某些函数的处理。这将导致添加新函数。现在我需要用新的处理来修补这个可执行文件 我知道这不是一个新问题,但我找不到任何有效的结论: LD_PRELOAD没有用,因为我使用的是静态二进制文件 eresi/elfsh不适用于X86-64 ELF二进制文件 pwntools和其他elf工具缺少修补和扩展段的功能 不需要Pin、Valgrind和类似的其他工具提供的运行时工具。运行时检测影响运行时性能。我的可执行文件将在同一台机器上生成数千个进程。(性
我的其他选择是什么?热补丁更容易实现,而且会给您带来更多的实现,但听起来您已经考虑过这一点,并决定通过替换符号来修补二进制文件 静态二进制补丁程序更容易开发,但会给用户带来更多负担。考虑要使用此工具修补名为
myelf
的可执行文件,将名为myfunc()
的函数替换为您自己返回0的函数,请执行以下操作:
elfpatch.py--apply--symbol文件symbols.txt myelf
此处symbols.txt的内容为:
myfunc B80000000C3
其中
b8000000c3
是返回0的x86机器码代码>。只要打补丁的函数很简单,这就足够简单了,但是函数越复杂,过程就越复杂,特别是如果您必须保留并调用原始函数,如果该函数调用其他库中的其他函数…热修补会更容易实现,而且会给您带来更多的实现,但听起来您已经考虑过这一点,并决定通过替换符号来修补二进制文件
静态二进制补丁程序更容易开发,但会给用户带来更多负担。考虑要使用此工具修补名为myelf
的可执行文件,将名为myfunc()
的函数替换为您自己返回0的函数,请执行以下操作:
elfpatch.py--apply--symbol文件symbols.txt myelf
此处symbols.txt的内容为:
myfunc B80000000C3
其中b8000000c3
是返回0的x86机器码代码>。只要打补丁的函数很简单,这就足够简单了,但函数越复杂,处理过程就越复杂,特别是当您必须保留并调用原始函数,并且该函数调用其他库中的其他函数时…感谢mnistic使用elfpatch.py的示例。但是我的用例更复杂。我需要替换现有elf的整个函数(可能还需要添加新函数)。这个工具将替换整个函数。至于添加新功能,我不知道可能需要什么用例,但是如果您真的需要它,您可能需要扩展该工具,或者找到其他东西objcopy
是行业标准,但恐怕这也需要您做大量工作。感谢mnistic使用elfpatch.py的示例。但是我的用例更复杂。我需要替换现有elf的整个函数(可能还需要添加新函数)。这个工具将替换整个函数。至于添加新功能,我不知道可能需要什么用例,但是如果您真的需要它,您可能需要扩展该工具,或者找到其他东西objcopy
是行业标准,但也需要您进行大量工作。