0

バイナリを実行できるプログラムを作成しようとしています。要求されたときに特定のファイルを別のファイルに置き換えます。これは、LD_PRELOADで使用される、システムコール関数の単純な置換を備えたライブラリです。問題は、読み取り用にオープンをキャッチすることです(代わりに代替ファイルが読み取られます)が、書き込みは常に実際の指定されたファイルに戻ります。他に知っておくべき「オープンな」システムコールはありますか?

4

4 に答える 4

4

気にしないでください-愚かな間違い。

絶対パスと相対パスの両方をチェックしていませんでした...

于 2009-05-29T01:08:36.747 に答える
2

問題の原因はわかりませんが、プログラムでstraceを使用すると、ある程度の洞察が得られる可能性があります。これは、正常なLinuxディストリビューションの一部である必要があります。

于 2009-05-29T00:34:22.107 に答える
2

それが書き込みのために開いている場合、それはおそらくcreat関数を通過しています(私はfopenあなたをそこにリダイレクトすると思います)。fcntl.h完全なリストを確認してください。

于 2009-05-29T00:38:51.193 に答える
1

要求されたときに特定のファイルを別のファイルに置き換える

入力ファイルのみをチェックしているように聞こえます(ファイル名でチェックしますか?)。出力ファイルも確認して置き換える必要があります。

出力が標準出力の1つに送られる場合は、実行可能ファイルにフォークする前に、それらを閉じて、代わりの出力で再度開く必要があります。

実行可能ファイルが行うすべてのシステムコールを見つけるには、straceを使用できます。
実行可能ファイルが行うすべてのライブラリ呼び出しを見つけるには、ltraceを使用できます。

于 2009-05-29T00:34:22.497 に答える