「/usr/share/nmap/」など、プリコンパイルされた実行可能ファイルに保存されているいくつかのハードコーディングされたパスを上書きして別のディレクトリにリダイレクトしたいと思います。
私が考えている理想的な解決策はroot権限を必要としないので、シンボリックリンクを作成することは絶対禁物です。
(再コンパイルも不可能)
答え1
perl -pe 's:/usr/share/nmap/:/other/dir/nmap/:g
' /path/to/executable > new-executable
/other/dir/nmap
と長さが同じでなければなりません/usr/share/nmap
。/
そうでない場合は、次の文字で埋めることができます。
perl -pe 's:/usr/share/nmap/:/other//////dir/:g
' /path/to/executable > new-executable
新しい道はもう長くなりません。/tmp
これが問題であれば、いつでもシンボリックリンクを生成するオプションがあります。
答え2
@slmの答えを参照してください...
これを行う3番目の方法可能再マップする実行可能ファイルを除くすべての項目が実際の項目にリンクされている実行可能ファイルを実行するためのchrootサンドボックス環境を作成します。しかしそれは複雑である。
しかし、ソースコードを入手して再コンパイルすることをお勧めします。 (または独自のコードの場合は、ベンダーに支払いを行い、カスタム実行可能ファイルを提供してください...)
答え3
私が前生にしたことは注意深いhexl-mode
文字列を置き換えるには、バイナリエディタ(emacs / xemacsなど)を使用して実行可能ファイルを編集します(代わりに短く、ゼロ文字で埋める必要があります!)。
実行可能ファイルに固定パスが含まれている場合は、通常、環境変数(TMPDIR、EDITOR / VISUALなどの変数)を使用するか、適切なパラメーターを指定してオーバーライドできます。その長さが本当に確立されたら、その理由について尋ねます。セキュリティーまたは構成指示があるかもしれませんが、上書きしないでください。もちろん、これはただそうかもしれません。怠惰しかし、これはあなたのディストリビューションにパッケージされたソフトウェアでは不可能であり、検閲される可能性があります。
答え4
ちょうど見つけたptraceベースのchrootの再実装:PRoot。
バインディング機能がまさに私が探している機能です!
これは実行可能ファイルで文字列を置き換えるよりも信頼性が高く、スクリプトで簡単に使用できます。