Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux上ELF64二进制文件的静态修补_Linux_Static_Binary_Instrumentation - Fatal编程技术网

Linux上ELF64二进制文件的静态修补

Linux上ELF64二进制文件的静态修补,linux,static,binary,instrumentation,Linux,Static,Binary,Instrumentation,我有一个静态可执行ELF64二进制文件。我想覆盖和更改某些函数的处理。这将导致添加新函数。现在我需要用新的处理来修补这个可执行文件 我知道这不是一个新问题,但我找不到任何有效的结论: LD_PRELOAD没有用,因为我使用的是静态二进制文件 eresi/elfsh不适用于X86-64 ELF二进制文件 pwntools和其他elf工具缺少修补和扩展段的功能 不需要Pin、Valgrind和类似的其他工具提供的运行时工具。运行时检测影响运行时性能。我的可执行文件将在同一台机器上生成数千个进程。(性

我有一个静态可执行ELF64二进制文件。我想覆盖和更改某些函数的处理。这将导致添加新函数。现在我需要用新的处理来修补这个可执行文件

我知道这不是一个新问题,但我找不到任何有效的结论:

  • LD_PRELOAD没有用,因为我使用的是静态二进制文件
  • eresi/elfsh不适用于X86-64 ELF二进制文件
  • pwntools和其他elf工具缺少修补和扩展段的功能
  • 不需要Pin、Valgrind和类似的其他工具提供的运行时工具。运行时检测影响运行时性能。我的可执行文件将在同一台机器上生成数千个进程。(性能达到~5%仍然可以)
  • 解释问题陈述和技术方面,但不指定上下文中使用的工具


    我的其他选择是什么?

    热补丁更容易实现,而且会给您带来更多的实现,但听起来您已经考虑过这一点,并决定通过替换符号来修补二进制文件

    静态二进制补丁程序更容易开发,但会给用户带来更多负担。考虑要使用此工具修补名为
    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
    是行业标准,但也需要您进行大量工作。