コンパイルされたelfファイルに別のコマンドを実行させる方法

コンパイルされたelfファイルに別のコマンドを実行させる方法

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

  1. スクリプトを作成します~/bin/file.shmkdir ~/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"
    

すべての人のための実際の例(これを行うにはrootアクセス権が必要なので、または/usr/bin/fileのような名前):sudodoassu

  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
    

関連情報