1

研究プロジェクトで困っています。私がしようとしているのは、ptrace を使用してターゲット プロセスの実行を監視することです。ptrace の助けを借りて、ターゲット コード セグメントに mprotect syscall を挿入し (ブレークポイントに似ています)、スタック保護を PROT_NONE に設定します。その後、元の指示を復元し、ターゲットを続行させます。無効なパーミソン segfault を取得すると、syscall を再度挿入してスタックの保護を解除し、その後、segfault の原因となった命令を実行してスタックを再度保護します。

(これは単純なプログラムでは実際に機能します。)

私の問題は、このセットアップでは、ライブラリ関数呼び出しでターゲット (かなり) がランダムにクラッシュすることです (動的または静的リンクを使用するかどうかに関係なく)。クラッシュするとは、何らかの理由でマップされていないメモリにアクセスしようとするか、関数内でハングし続ける__lll_lock_wait_private(malloc 呼び出しに続いている) ことを意味します。

クラッシュは常に発生するとは限らず、常に同じ位置で発生するとは限らないことをもう一度強調しましょう。

同期の問題のように聞こえますが、私が知る限り (/proc/pid/tasks/ を調べたということです)、実行中のスレッドは 1 つだけです。

それで、これの理由が何であるかについて何か手がかりはありますか?よくわからない場合でも、提案を教えてください。ここではアイデアが不足しています...

4

1 に答える 1

1

また、アドレス空間のランダム化によって非決定性が生じる可能性もあります。問題をより決定論的にするために、それを無効にすることをお勧めします。

編集:

ASR をオフにすると問題が「修正」されることを考えると、根本的な問題は次のようになる可能性があります。

  1. どこかで、0 が有効であるべきときに無効であると考えるか、またはその逆です。(私が持っていたもの)。
  2. ある実行のアドレスを別の実行に対して使用しますか?
于 2011-10-14T14:16:12.300 に答える