Linux 64ビットで小さなデバッガーに取り組んでいますが、システムコールの戻り値を探すのに苦労しています.
RIP 値をテストしています。つまり、PEEK_USERDATA を実行して ptrace を実行すると、RIP アドレスではなくオペコードが直接返されます (ここで、0x050f は SYSCALL のオペコードです)。
if (rip & 0x0000ffff == 0x050f)
次に、システムコール名の引数などを取得します
問題は、これらのシステムコールの戻り値をどのように取得するかです。ptrace が PTRACE_SYSCALL を提供して、カーネルモードの開始/終了について警告することは知っていますが、RIP 値を直接確認したいので、SINGLESTEP を使用しています。私のリップがSYSLEAVEおよびSYSEXITオペコードと一致するが、一致しない場合。戻り値を確認できる唯一の方法は、実際には orig_rax を確認することですが、この方法では exit_group retval を取得できません。
Linux ABI が戻り値を RAX に格納することを望んでいることは知っていますが、ユーザーランドへの戻りを確認する方法がわかりません。
ありがとうございます。