We forwarded your question to our application engineering team. One engineer responds:
"The privileged instructions control system functions (such as the loading of system registers). They can be executed only when the CPL is 0 (most privileged). If one of these instructions is executed when the CPL is not 0, a general-protection exception (#GP) is generated."
"To access a call gate, a far pointer to the gate is provided as a target operand in a CALL or JMP instruction. The segment selector from this pointer identifies the call gate; the offset from the pointer is required, but not used or checked by the processor. When the processor has accessed the call gate, it uses the segment selector from the call gate to locate the segment descriptor for the destination code segment. This segment descriptor can be in the GDT or the LDT. It then combines the base address from the code-segment descriptor with the offset from the call gate to form the linear address of the procedure entry point in the code segment."
So while you can munge together any GDT/LDT of your choosing, one cannot load the table and thus affect privileged state unless you were already at ring 0.
==
Lexi S.
Intel(R) Software Network Support
http://www.intel.co
m/software
Contact us