Zerosquare (./10) :
Sinon, la façon dont sont effectués les appels API pour les applications n'est pas la même sous Linux et sous Windows. Néanmoins le but est le même : faire que les anciennes applications compilées continuent à fonctionner sur un système plus récent (oui, c'est aussi possible avec Linux, par exemple en faisant une compilation statique pour ne pas avoir de problème de dépendances : on demande d'inclure le code de toutes les bibliothèques utilisées dans l'exécutable, les seuls liens dynamiques restant étant les fonctions du noyau comme write()) :
Non en fait, c'
est la même.
- sous Linux, les numéros des fonctions du noyau sont définis une fois pour toutes, et les appels se font effectivement avec l'interruption 0x80 ou l'instruction SYSENTER.
ou SYSCALL

- sous Windows, les appels de fonctions API se font comme des appels de sous-routines ordinaires, mais le linker laisse un "blanc" à la place de l'adresse de la fonction, et le nom en clair de la fonction est inclus dans une table dans l'exécutable. Au chargement du programme, le système remplit ces blancs avec les adresses des fonctions correspondant à chaque nom. (on peut aussi utiliser un numéro à la place du nom de la fonction, mais ceux-ci changent à chaque version de Windows, donc la compatibilité n'est pas assurée).
Tu viens de décrire le fonctionnement des DLL... Sous linux les libraries dynamique fonctionnent pareil...
Tout ceci concerne uniquement les applications, pour les drivers et le fonctionnement interne c'est potentiellement différent
Oui, les drivers en mode système ont directement accès à l'API natif vu qu'ils sont en mode système...
Pour le reste, tout comme sous linux les appels systèmes ont un wrapper dans glibc (ou autre similaire), les appels système sous Windows ont un wrapper dans NTDLL. Après effectivement, j'avais pas tenu compte que linux n'avait pas vraiment d'API en dehors de ses appels systèmes donc effectivement c'est logique que les numéros d'appels système soient fixes...
En résumé
Linux <=> Noyau Windows
glibc <=> ntdll
.dll <=> .so
Y'a rien de plus.
