Я знаю, що інтерфейс системного виклику реалізований на низькому рівні і, отже, залежить від архітектури / платформи, а не "загального" коду.
Однак я не можу чітко бачити причину, чому системні дзвінки в 32-бітових ядрах x86 Linux мають номери, які не зберігаються однаковими в подібній архітектурі Linux 64-бітний x86_64? Яка мотивація / причина цього рішення?
Першим моїм припущенням стало те, що основна причина полягала в тому, щоб 32-бітні програми працювали в системі x86_64, щоб через розумне зміщення номера системного виклику система знала, що простір користувача 32-бітний або 64-бітний відповідно. Однак це не так. Принаймні, мені здається, що read (), який є системним викликом номер 0 в x86_64, не може бути узгоджений з цією думкою.
Ще одна здогадка полягає в тому, що зміна номерів системних викликів може мати захист / посилення, що я не зміг сам підтвердити.
Не знаючи труднощів із застосуванням кодових частин, залежних від архітектури, мені все ще цікаво, як змінювати номери системних викликів , коли немає необхідності (оскільки навіть 16-бітний реєстр міг би зберігати значно більше, ніж наразі ~ 346 чисел, щоб представляти всі дзвінки), допомогло б досягти будь-чого, крім порушення сумісності (хоча використання системних дзвінків через бібліотеку, libc, пом'якшує це).