gpt4 book ai didi

c - 使用 SINGLESTEP 通过 ptrace 获取返回值

转载 作者:IT王子 更新时间:2023-10-29 00:36:40 25 4
gpt4 key购买 nike

我正在 Linux 64 位下开发一个小调试器,我在查找系统调用的返回值时遇到了问题,

我正在测试 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 中,但我不知道如何见证返回用户空间。

谢谢。

最佳答案

您不能跟踪内核,因此如果您在 SYSCALL 停止后执行另一个 PTRACE_SINGLESTEP 或 PTRACE_SYSCALL,它将执行系统调用并在返回后停止在下一条指令。此时,您可以检查寄存器以查看系统调用的返回值是什么。

关于c - 使用 SINGLESTEP 通过 ptrace 获取返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10543444/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com