2011-06-26 3 views
4

実行中のプロセスのスタックにバイナリコードを書き込むためにptraceを使いたいと思います。 しかし、これはセグメンテーションフォルト(信号11)を引き起こします。最近のLinuxでプロセスのスタック内でコードを実行

%eipレジスタが、スタックに実行したい最初の命令へのポインタを格納していることを確認できます。私は、Linuxが実行可能なスタックデータを保護するいくつかのメカニズムがあると思います。

だから誰もそのような保護を無効にする方法を知っていますか?具体的には、私はFedora 15を試しています。

ありがとう!


すべての返信を読んだあと、execstackを試してみました。これは実際には実行可能なコードを実行可能にしました。皆さん、ありがとうございました!

+0

あなたはptrace特権を持っています。これはあなたが同じユーザーであるか、またはあなたがrootであるためですか?あなたはどのアーキテクチャをターゲットにしていますか? – Tobu

答えて

1

既にそれはNXビットに起因している述べ。しかし、それは可能です。私はgccがtrampolinesのためにそれ自身を使用していることを知っています(これはネストされた関数の関数ポインタなどの回避策です)。私は詳細を見ていませんが、gccコードを見ることをお勧めします。アーキテクチャ固有のマクロTARGET_ASM_TRAMPOLINE_TEMPLATEのソースを検索すると、そこではどのように動作するのかがわかります。

EDIT:mprotectは、メモリページのアクセス権を変更するために使用されます。そのマクロのための簡単にGoogleは、私にヒントを与えました。また、日付を生成して実行するときは注意してください。おそらく、命令キャッシュをフラッシュするだけでよいでしょう。

関連する問題