gpt4 book ai didi

linux - 在 Linux 中,在进入系统调用时,%eax 的值是多少? (不是 orig_eax)

转载 作者:IT王子 更新时间:2023-10-29 00:50:31 26 4
gpt4 key购买 nike

当系统调用返回时,我在 %eax 中得到系统调用返回值,但是在输入时我得到 -38,即十六进制的 0xFFFFFFDA。这适用于写/读。这个数字是多少?它能否用于安全区分入口和导出?

最佳答案

系统调用条目上的 eax 中的 -38 显然是 ENOSYS(函数未实现),并由 arch/x86/kernel/entry_32.S 中的 syscall_trace_entry 放置在那里。我想可以安全地假设它始终存在于系统调用入口处,但是它也可以存在于系统调用导出处,如果系统调用返回 ENOSYS。

就我个人而言,我一直只是在使用 ptrace 时跟踪我是处于系统调用入口还是退出,尽管我也看到了一些依赖于 ENOSYS 的代码。 (我假设你正在使用 ptrace)我想如果当你附加到它时进程恰好在系统调用中,那将不会起作用,但我很幸运没有遇到这个问题。

我快速查看了 strace 源,我猜它也跟踪状态,因为有一条评论说“我们正在附加到一个已经运行的进程。尝试在系统调用中找出进程的状态,处理好第一个事件。”紧接着它说“该进程在系统调用的过程中处于休眠状态。伪造系统调用进入事件。”。

简而言之,不能安全地使用该值来区分入口和导出。也就是说,我不确定手动跟踪它是最好的方法,因为我还没有真正得到任何肯定会告诉你使用该技术的来源,抱歉。 :)

关于linux - 在 Linux 中,在进入系统调用时,%eax 的值是多少? (不是 orig_eax),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5503425/

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