如何让已经编译好的elf文件执行另一个命令

如何让已经编译好的elf文件执行另一个命令

我需要当 ELF 文件被执行时它将执行一个命令。

例如:运行/usr/bin/file这是一个已经编译好的ELF Binary,执行命令touch /tmp/file_is_executed

如果可以的话,我会重新编译代码并将我想要的命令添加到源文件中。但是,我没有源代码,所以我必须处理编译版本。

答案1

如果您需要为自己发生这种情况作为快速修复,您可以使用一个函数来覆盖目标命令:

file() { touch /tmp/file_is_executed; command file "$@"; }

但是,如果您希望它在不透明的应用程序中跟踪命令的执行,或者当其他人执行命令时,则函数不一定在您需要时可用。同样,如果使用完整路径(即/usr/bin/file而不是)调用目标可执行文件file,则不能使用此方法。在这些情况下,您可以创建自己的目标可执行文件的实现。

请注意,没有解决方案会更改您在问题中描述的 ELF 可执行文件。 (修补二进制文件是一项不简单的操作。)

仅适合您的工作示例/usr/bin/file

  1. 创建一个脚本~/bin/file.sh(您可能mkdir ~/bin首先需要):

    #!/bin/sh
    touch /tmp/file_is_executed
    exec /usr/bin/file "$@"
    
  2. 使脚本可读且可执行

    chmod a+rx ~/bin/file.sh
    
  3. 安装脚本为真实的事情

    cp -p ~/bin/file.sh ~/bin/file
    
  4. 确保 ~/bin 在你的$PATH /usr/bin

    export PATH="$HOME/bin:$PATH"
    

为每个人提供的工作示例/usr/bin/file(您需要 root 权限才能执行此操作,因此需要诸如sudodoas或 之类的内容):su

  1. 创建一个脚本作为/usr/bin/file.sh

    #!/bin/sh
    touch /tmp/file_is_executed
    exec "$0.bin" "$@"
    
  2. 使脚本可读且可执行

    chmod a+rx /usr/bin/file.sh
    
  3. 安装脚本为真实的事情

    mv /usr/bin/file /usr/bin/file.bin &&
    cp -p /usr/bin/file.sh /usr/bin/file
    

相关内容