私はしばらく遊んでいptrace
ます。私はこれまたはこれのようないくつかのチュートリアルに従いました。これまでのところ、ptrace
-d子プロセスがある場合、次のことができます。
- システムコールを検出し、レジスタを参照します。
PTRACE_PEEKDATA
のオプションのおかげで、レジスタが指すアドレスに含まれる文字列をフェッチしますptrace
。PTRACE_POKEDATA
のオプションを使用して、これらのレジスタの値を変更し、子プロセスのユーザースペースのメモリ値を変更しますptrace
。
open
私の問題は次のとおりです。たとえば、システムコールを検出したとしましょう。ebxレジスタに格納されているアドレスのおかげで、開くファイルのファイル名を変更できます。ただし、ファイル名を任意のサイズに変更できるのではないかと思います。変更する名前が非常に大きい場合(たとえば、元のファイル名の長さの50倍)、書き込むべきではないメモリをいじっていませんか?子供のメモリ空間にメモリを「割り当てる」必要がありますか?もしそうなら、これはどのように行われますか?
子プロセスはで実行されるプログラムであることに注意してくださいexecve
。そのソースコードにアクセスできません。