2016-08-21 17 views
1

私が知っている限りでは(間違っている可能性があります)、命令をx86-64システムで実行する方法はありません。代わりに、 'ud2'オペコードの後に​​命令を実行して信号をトリガすることもできますが、制御フローを変更して別の場所に行く命令について心配する必要があります。PTRACE_SINGLESTEPはどのように実装されていますか?

私が正しく理解していれば、ptrace()のシステムコールには単一の命令だけを実行するSINGLESTEPオプションがあります。これはどのように実装されていますか私は、カーネルに命令とその理由を特定するための何らかの逆アセンブラがあるとは想像できません。それで、私が知りませんが使用しているいくつかの種類のアーキテクチャ上の特徴はありますか?何か全く違う?

+4

私はこれについて最新ではありませんが、もはやトラップフラグ(TF)はありませんか? – NPE

+0

ナー、私はそれについて知りませんでした! – bchurchill

答えて

5

はい、アーキテクチャ上の1ステップフラグがあります。カーネルからユーザ空間に戻ると、カーネルはRIP/RFLAGSを同時に設定することができるため、カーネル命令でトリガされなくても、ユーザ空間に対してシングルステップを設定できます。

何らかの理由で、Trap Flagには独自のウィキペディアの記事があります。 wikipedia's EFLAGS articleも参照してください。

このすべてを記載したIntelのアーキテクチャマニュアルへのリンクについては、タグwikiを参照してください。


おそらく代わりに、あなたは、あなたがデコードx86命令の長さを決定するためのコードが必要と思い信号

をトリガするために「UD2」オペコードに続く命令を実行する可能性があります。 ud2を使用せず、int3 which exists for this purpose.

IIRCを使用します。また、コードを変更せずにハードウェアブレークポイントを設定できるデバッグレジスタもあります。

関連する問題