我需要当 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
:
创建一个脚本
~/bin/file.sh
(您可能mkdir ~/bin
首先需要):#!/bin/sh touch /tmp/file_is_executed exec /usr/bin/file "$@"
使脚本可读且可执行
chmod a+rx ~/bin/file.sh
安装脚本为真实的事情
cp -p ~/bin/file.sh ~/bin/file
确保 ~/bin 在你的
$PATH
前/usr/bin
export PATH="$HOME/bin:$PATH"
为每个人提供的工作示例/usr/bin/file
(您需要 root 权限才能执行此操作,因此需要诸如sudo
、doas
或 之类的内容):su
创建一个脚本作为
/usr/bin/file.sh
#!/bin/sh touch /tmp/file_is_executed exec "$0.bin" "$@"
使脚本可读且可执行
chmod a+rx /usr/bin/file.sh
安装脚本为真实的事情
mv /usr/bin/file /usr/bin/file.bin && cp -p /usr/bin/file.sh /usr/bin/file