我读到,在较新的内核中,系统调用是使用 INT X80 指令和 sysenter 指令调用的。与其他方法相比,sysenter 指令的调用速度也更快。
我如何检查该方法调用了哪些所有系统调用?
答案1
除非您运行的是 2.6 之前的内核,否则您将不会使用该方法调用大多数系统调用。自内核 2.6(始于 2.5 系列)以来,int x80
它们已被该方法取代,用于处理重要的事情。systenter/sysexit
请注意,如果您有针对旧内核构建的旧二进制文件,它们仍然可以使用该int x80
方法 - 您唯一能做的就是重建它们(或获取更新的二进制文件)。
运行ldd your_exe
您担心的程序。如果它列出linux-gate.so.1
或linux-vdso.so.1
,则它正在使用新的系统调用。如果没有,则(很可能)使用旧方法。
对于静态二进制文件,很难判断。一种方法是objdump your_exe | less
寻找系统调用包装器(__gettimeofday
是一个很好的候选者)。您将从反汇编中看到它是否使用中断。
有关旧 INT 80 调用如何工作以及新系统调用接口如何形成和设置的详细概述可以在此处找到:系统调用(安德里斯·布劳威尔)。
另一本好读的书:什么是 linux-gate.so.1?。
这两篇文章都在另一篇文章中链接:Linux 2.6中基于Sysenter的系统调用机制,并指向了解 Linux 内核Daniel P. Bovet 和 Marco Cesati 所著的书非常适合了解更多一般信息。
简而言之:不用担心。如果您有一个足够新的系统(CPU、内核和发行版),那么您正在使用“快速”系统调用。