¿Cómo puedo detectar mediante programación en el que el anillo (-1, 0, 1, 2, 3) estoy usando?

StackOverflow https://stackoverflow.com/questions/1086722

  •  23-08-2019
  •  | 
  •  

Pregunta

¿Cómo puedo detectar mediante programación en el que el anillo (-1, 0, 1, 2, 3) Me postulo?

¿Fue útil?

Solución

La forma más sencilla es, a tan sólo ejecute el comando (86) y coger el error correspondiente.

por ejemplo. (SEH, de Windows, de modo de núcleo)

bool ring_lower_0 = false;
__try
{
    __asm { <cmd> };
    ring_lower_0 = true;
}
__except( GetExceptionCode() == EXCEPTION_PRIV_INSTRUCTION )
{
    ring_lower_0 = false;
}

Notas:

cmd es un comando ensamblador. Vea los manuales de referencia de arquitectura Intel para obtener una lista de comandos y sus respectivos niveles de timbre.

Linux tiene un concepto ligeramente diferente.

Pero recuerda que las máquinas virtuales que residen en un nivel inferior puede enmascarar el resultado mediante la emulación de la llamada.

(NB: El empleo de la máquina virtual es traducir la instrucción no válida en una llamada significativa)


Si realmente quiere comprobar si su un virtualizado y quiere detener la ejecución debido a esto, debe leer lo que se ha escrito sobre la 'píldora Roja'.

Otros consejos

A menos que seas un controlador de dispositivo, siempre se le ejecuta en Ring 3 (para los sistemas que tienen "anillos", per se).

Normalmente me gustaría escribir que usted debe leer sobre la "programación en modo protegido". Hay un artículo sobre cómo intertact con el anillo 0 usando Windows XP SP2. Tenga en cuenta que va a cambiar para otras versiones de Windows y de seguro que otros sistemas operativos.

http://www.codeproject.com/KB/threads/MinimalisticRingZero.aspx

Si lo que desea es detectar si se está ejecutando dentro de una máquina virtual, para evitar que la gente depurar la aplicación, por ejemplo, puede comprobar aquí:

http://www.codeproject.com/KB/system/VmDetect.aspx

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top