Ces jours-ci j'ai trouvé un blog la fonction abort mentionné dans C.Est-ce que l'abandon est exécuté dans l'anneau 0?
Voici le code source de la fonction abort: http://cristi.indefero.net/p/uClibc-cristi/source/tree/0_9_14/libc/stdlib/abort.c
je trouve qu'il utilise l'instruction hlt
(Mon PC est x86).
Mais semble que hlt
doit fonctionner dans l'anneau 0. (se référer au wiki http://en.wikipedia.org/wiki/HLT)
Il semble que l'abandon est en cours d'exécution dans l'espace utilisateur. Donc, l'utilisation de l'instruction hlt
dans l'abandon semble illégale.
BTW, j'essaie d'exécuter hlt
sous Linux et Windows. Mais je rencontre une erreur.
Dans linux:
#include <iostream>
using namespace std;
#define HLT_INST asm("hlt")
int main(){
cout<<"whill run halt"<<endl;
HLT_INST; //result in SIGSEGV error
return 0;
}
Sous Windows:
cout<<"will run hlg"<<endl;
/*Unhandled exception at 0x0040101d in test_learn.exe: 0xC0000096: Privileged instruction.
*/
__asm{
hlt;
}