Je sais que l'interface d'appel système est implémentée à un niveau bas et dépend donc de l'architecture / de la plateforme, pas du code "générique".
Cependant, je ne vois pas clairement pourquoi les appels système dans les noyaux Linux 32 bits x86 ont des numéros qui ne sont pas conservés de la même façon dans l'architecture similaire Linux 64 bits x86_64? Quelle est la motivation / raison derrière cette décision?
Ma première hypothèse était qu'une raison en arrière-plan consistait à laisser les applications 32 bits exécutables sur un système x86_64, de sorte que, via un décalage raisonnable vers le numéro d'appel du système, le système sache que l'espace utilisateur est de 32 ou 64 bits. respectivement. Ceci est cependant pas le cas. Au moins, il me semble que read () étant le numéro d'appel système 0 dans x86_64 ne peut pas être aligné sur cette idée.
Une autre hypothèse est que la modification des numéros d'appel système pourrait avoir un arrière-plan de sécurité / renforcement, ce que je n'ai pas pu confirmer moi-même.
Ignorant les défis de la mise en œuvre des parties de code dépendantes de l'architecture, je me demande encore comment changer les numéros d'appel système , quand il ne semble pas nécessaire (car même un registre 16 bits stockerait beaucoup plus que les ~ 346 numéros actuels pour représenter tous appels), aiderait à réaliser quoi que ce soit, mis à part rompre la compatibilité (bien que l’utilisation des appels système via une bibliothèque, libc, l’atténue).