当一个系统调用返回时,我得到%eax中的系统调用返回值,但是在入口处得到-38,这是hex的0xFFFFFFDA。 这是为了写/读。 这个数字是多less? 它可以用来安全区分出入口吗?
在系统调用期间,Windows如何切换到pipe理员模式?
将等待和waitpid块SIGCHLD并解除它在Linux中返回时?
系统调用条目中eax中的-38显然是ENOSYS(函数未实现),由arch / x86 / kernel / entry_32.S中的syscall_trace_entry放在那里。 我想假设它会一直存在于syscall入口上,但是如果系统调用返回ENOSYS, 它也可以在系统调用结束处出现 。
就我个人而言,我总是跟踪系统调用是否进入或使用ptrace时是否退出,尽管我也看到了一些依赖于ENOSYS的代码。 (我假设你正在使用ptrace)我想这不会工作,如果进程恰好在系统调用时附加到它,但我很幸运,不会碰到这个问题。
我简单地看了一下strace来源,我猜也跟踪了这个状态,因为有一个评论说:“我们正在附加一个已经运行的进程,试着弄清syscalls中进程的状态,来处理第一件事很好。“ 稍微有一点说:“这个进程在系统调用中间睡着了,假的是syscall入口事件。”
总之,这个价值不能被安全地用来区分一个入口和一个出口。 也就是说,我不确定手动跟踪是最好的方法,因为我没有真正的来源,肯定会告诉你使用这种技术,对不起。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。