ELFファイルの実行時にコマンドを実行する必要があります。
例:/usr/bin/file
このコンパイルされた ELF バイナリを実行し、次のコマンドを実行します。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"
すべての人のための実際の例(これを行うにはrootアクセス権が必要なので、または/usr/bin/file
のような名前):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