我正在使用
Linux 64位下的一个小调试器,我在查找syscall的返回值时遇到问题,
我正在测试RIP值,我的意思是我做了一个PEEK_USERDATA并且ptrace给我操作码而不是RIP地址,直接这样(其中0x050f是SYSCALL的操作码):
if (rip & 0x0000ffff == 0x050f)
问题是如何获得这些系统调用的返回值,我知道ptrace提供PTRACE_SYSCALL来警告我们关于进入/退出内核模式但是我想直接检查RIP值,所以我使用的是SINGLESTEP,我查了一下如果我的rip与SYSLEAVE和SYSEXIT操作码匹配,但它永远不会.我可以检查返回值的唯一方法是检查我的orig_rax,但是我不会以这种方式获得exit_group retval.
我知道Linux ABI希望将返回值存储在RAX中,但我不知道如何见证返回用户空间.
谢谢.
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。