Wiem, że interfejs wywołania systemowego jest implementowany na niskim poziomie, a zatem zależy od architektury / platformy, a nie „ogólnego” kodu.
Jednak nie widzę jasno, dlaczego wywołania systemowe w Linuksie 32-bitowe jądra x86 mają numery, które nie są takie same w podobnej architekturze Linux 64-bit x86_64? Jaka jest motywacja / powód tej decyzji?
Moje pierwsze przypuszczenie polega na tym, że przyczyną tła było utrzymywanie działania aplikacji 32-bitowych w systemie x86_64, aby dzięki rozsądnemu przesunięciu w stosunku do numeru wywołania systemowego system wiedział, że przestrzeń użytkownika jest 32-bitowa lub 64-bitowa odpowiednio. Tak jednak nie jest. Przynajmniej wydaje mi się, że read () będący wywołaniem systemowym o numerze 0 w x86_64 nie może być dopasowany do tej myśli.
Innym przypuszczeniem jest to, że zmiana numerów wywołań systemowych może mieć podłoże zabezpieczające / hartujące, czego nie byłem w stanie potwierdzić.
Nie znając wyzwań związanych z implementacją części kodu zależnych od architektury, wciąż zastanawiam się, jak zmienić systemowe numery wywoławcze , kiedy wydaje się, że nie ma takiej potrzeby (ponieważ nawet 16-bitowy rejestr przechowałby znacznie więcej niż obecnie ~ 346 liczb do reprezentowania wszystkich wywołania), pomogłyby w osiągnięciu czegokolwiek, poza zerwaniem kompatybilności (chociaż używanie wywołań systemowych przez bibliotekę, libc, łagodzi to).