微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在Linux中,在进入sys调用时,%eax中的值是多less? 不是orig_eax

一个系统调用返回时,我得到%eax中的系统调用返回值,但是在入口处得到-38,这是hex的0xFFFFFFDA。 这是为了写/读。 这个数字是多less? 它可以用来安全区分出入口吗?

在系统调用期间,Windows如何切换到pipe理员模式?

编译器如何知道你使用的函数是系统调用

使用ARM内联汇编做一个没有libc的系统调用

在Linux中添加系统调用0.01使用C ++的“信号量”

将等待和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] 举报,一经查实,本站将立刻删除。

相关推荐