调用门简单概括
Posted ltyandy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了调用门简单概括相关的知识,希望对你有一定的参考价值。
?
//通过调用门调用的 函数
void _declspec(naked) GateFun()
g_num = 100;
_asm mov [ g_esp ] , esp;
_asm mov ax , ss;
_asm mov word ptr [g_ss],ax
_asm retf;
?
int main()
//构造描述符,段选择子为8.
unsigned long long descript =
createCallGateDescript(8/*8是内核中的代码段选择子*/ , ( unsigned int )GateFun , 0 );
?
// 前4字节是EIP,后2字节是CS(0x004b)
// 执行流程:
// 1. 从buff这块内存中取出段选择子:0x4b
//
// 解释 SEL T RPL
// 十进制 9 0 3
// 2. 将段选择子分解,100 1011 ==> 1001 0 11, 得到GDT表中的下标:9
// 3. 取出GDT表中第9项描述符, 是一个调用门描述符.
// 4. 将调用门描述符中的段选择子加载到CS段寄存器
// 5. 判断RPL权限是否足够,足够的话继续下一步
char buff[ ] = 0,0,0,0,0x4b,00 ;
_asm call fword ptr ds:[buff];
// 6. 获取到描述符,解析描述符段选择子(8),权限足够的话执行函数。
以上是关于调用门简单概括的主要内容,如果未能解决你的问题,请参考以下文章