02. september 2006 - 17:15
Der er
2 kommentarer
Hvad er Current Protection Level (CPL)?
Er der nogen af jer kloge hoveder som kan fortælle mig om der er en metode til at bestemme hvilken "Protection Level" noget software kører i. Dvs. softwaren skal selv kunne gøre det. x86 arkitekturen har ring 0, 1, 2 og 3. Det er disse tal jeg skal bruge.
Kender i en assembly instruction som kunne returnere det?
02. september 2006 - 17:50
#1
Hmm, jeg fandt ud af det selv:
unsigned int GetCPL()
{
// Taken from Chapter 4.2 in IA-32 Intel Architecture Software Deleloper's Manual Volume 3A - System Programming Guide, Part 1
//
// Current privilege level (CPL) field — (Bits 0 and 1 of the CS segment register.) Indicates
// the privilege level of the currently executing program or procedure. The term current
// privilege level (CPL) refers to the setting of this field.
//
unsigned int cpl;
__asm
{
mov ax, cs
and eax, 0x00000003
mov cpl, eax
}
return cpl;
}
03. september 2006 - 16:20
#2
unsigned int GetCPL()
{
__asm
{
mov ax, cs
and eax, 0x00000003
}
}
cdecl returnerer jo alligevel resultatet i eax ;)