我知道系统调用接口是在较低级别上实现的,因此依赖于体系结构/平台,而不是“通用”代码。
但是,我不清楚为什么在32位x86内核的Linux中系统调用的编号在相似的体系结构Linux 64位x86_64中不保持相同的原因?做出此决定的动机/原因是什么?
我的第一个猜测是,后台原因是使32位应用程序在x86_64系统上可运行,因此通过合理地偏移系统调用号,系统将知道用户空间是32位还是64位分别。但是事实并非如此。至少在我看来,read()是x86_64中的系统调用号0,无法与这种想法保持一致。
另一个猜测是,更改系统电话号码可能具有安全性/强化背景,而我无法确定自己的身份。
由于对实现与体系结构相关的代码部分所面临的挑战一无所知,我仍然想知道如何在似乎没有必要的情况下更改系统调用号(因为即使一个16位寄存器也将存储比当前约346个数字大得多的数字,以代表全部)调用),将有助于实现除破坏兼容性以外的任何功能(尽管通过库libc使用系统调用可以缓解这种情况)。