码迷,mamicode.com
首页 > 其他好文 > 详细

调用门简单概括

时间:2019-08-26 20:54:51      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:char   retf   解释   ted   描述符   字节   描述   下标   执行流程   

?
//通过调用门调用的 函数
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),权限足够的话执行函数。
}

调用门简单概括

标签:char   retf   解释   ted   描述符   字节   描述   下标   执行流程   

原文地址:https://www.cnblogs.com/ltyandy/p/11414659.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!