0

GDB を使用して実行中のプロセスにコードを挿入しようとしていますが、コードを実行しようとするたびに SIGSEGV を取得しています。私はubuntu(Oneiric)を使用しています。Python スクリプトを使用してコードを環境変数にエクスポートして出力し、gdb 内x/50s *((char**)environ)から .

したがって、私が行うx/30i *(addressOfCode)と、そこにあるアセンブリ命令は、実行したいものと完全に一致します。したがって、コードの開始点にブレークポイントを挿入し、そこにジャンプして stepi を実行すると、segfault が発生します。さらに、メモリ内の場所を選択していくつかの NOP を挿入し、そのうちの 1 つで中断し、そこにジャンプしてステップ実行すると、セグメンテーション違反も発生します。

どうすればこれを回避できますか? プロセスの指定されたメモリから飛び出しているという理由だけで、セグメンテーション違反を起こしているのでしょうか? これを回避するには、どのようなオプションがありますか?

ご協力いただきありがとうございます!

4

1 に答える 1

0

プロセスの指定されたメモリからジャンプしているという理由だけで、セグフォールトしていますか?

上記の説明が何を意味するのかわかりません。「プロセス用の指定メモリ」などはありません。

ほとんどの場合、SIGSEGV実行可能スタックがないために取得しています(Linuxおよび他の多くのUNIXバリアントの環境変数がスタックに渡されます)。

Linuxを使用している場合は、とリンクしてみてくださいgcc main.c ... -Wl,-z,execstack。それでコードインジェクションが機能する場合は、実行不可能なスタックが実際に問題になります。

于 2012-09-26T07:06:00.453 に答える