我的工作在Linux下64位一點點調試器,我有找的系統調用的返回值的麻煩ptrace的返回值,獲取使用單步
我測試RIP價值,我的意思是我做的一個PEEK_USERDATA和ptrace的給我的操作碼的回報沒有RIP地址,直接這樣(其中0x050f是SYSCALL的操作碼):
if (rip & 0x0000ffff == 0x050f)
然後讓系統調用名ARGS等
問題是,我該怎麼辦得到這些系統調用的返回值,並且我知道ptrace提供了PTRACE _SYSCALL警告我們進入/離開內核模式,但我想直接檢查RIP值,所以我使用SINGLESTEP,我檢查了我的rip是否匹配SYSLEAVE和SYSEXIT操作碼,但它從不檢查。我可以檢查返回值的唯一方法實際上是通過檢查我的orig_rax,但是我不會以這種方式得到exit_group retval。
我知道Linux ABI希望將返回值存儲在RAX中,但我不知道如何目擊返回到userland。
謝謝你。
rip是指令指針 - 它包含下一個要執行的指令的地址,而不是該指令的操作碼位... –
我對RIP的位置做了一次PEEK,因此ptrace讓我回到操作碼編輯操作 – r3dalice