亚历克斯:
我研究了Linux内核,发现对于x86_64体系结构,中断int 0x80
不适用于调用系统调用1。
对于i386体系结构(32位x86用户空间),更可取的是:syscall
或者int 0x80
为什么?
我使用Linux内核版本3.4。
脚注1:int 0x80
在某些情况下确实可以在64位代码中工作,但是从不建议这样做。如果以64位代码使用32位int 0x80 Linux ABI,会发生什么情况?
PawełDziepak:
syscall
是在上进入内核模式的默认方式x86-64
。该指令在Intel处理器的 32位操作模式下不可用。
sysenter
是最常用于以32位操作模式调用系统调用的指令。它类似于syscall
,但是使用起来有点困难,但这是内核的关注点。
int 0x80
是调用系统调用的传统方式,应避免使用。
调用系统调用的首选方法是使用vDSO,这是在每个进程地址空间中映射的一部分内存,它可以更有效地使用系统调用(例如,在某些情况下完全不进入内核模式)。与传统int 0x80
方式相比,vDSO还可以处理更困难的问题syscall
或处理sysenter
指令。
另外,看到这个和这个。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
编辑于
我来说两句