J'ai lu que dans les nouveaux noyaux, les appels système sont invoqués à l'aide de l'instruction INT X80 et également à l'aide de l'instruction sysenter. De plus, l'instruction sysenter donne une invocation plus rapide par rapport à l'autre méthode.
Comment puis-je vérifier quels appels système sont invoqués par cette méthode ?
Réponse acceptée :
À moins que vous n'utilisiez un noyau pré-2.6, vous n'utiliserez pas le int x80
méthode pour invoquer la plupart des appels système. Ils ont été remplacés au profit du systenter/sysexit
méthode depuis le noyau 2.6 (commencé dans la série 2.5) pour les choses qui comptent.
Notez que si vous avez d'anciens binaires qui ont été construits avec des noyaux plus anciens, ceux-ci pourraient toujours utiliser le int x80
- la seule chose que vous puissiez faire à ce sujet est de les reconstruire (ou d'obtenir des fichiers binaires mis à jour).
Exécutez ldd your_exe
sur le programme qui vous inquiète. S'il répertorie linux-gate.so.1
ou linux-vdso.so.1
, il utilise les nouveaux appels système. Sinon, c'est (très probablement) en utilisant l'ancienne méthode.
Pour les binaires statiques, c'est plus difficile à dire. Une façon serait de objdump your_exe | less
et recherchez les wrappers d'appels système (__gettimeofday
est un bon candidat). Vous verrez à partir du démontage s'il utilise une interruption ou non.
Un bon récapitulatif du fonctionnement des anciens appels INT 80 et de la création et de la configuration de la nouvelle interface syscall peut être trouvé ici :Appels système (par Andries Brouwer).
Une autre bonne lecture :Qu'est-ce que linux-gate. so.1 ?.
Ces deux articles sont liés dans cet autre :Sysenter Based System Call Mechanism in Linux 2.6, et pointe vers le livre Understanding The Linux Kernel de Daniel P. Bovet, Marco Cesati qui est bon pour des informations plus générales.
Bref :ne vous en faites pas. Si vous avez un système assez récent (CPU, noyau et distribution), vous utilisez les appels système "rapides".