首页
社区
课程
招聘
[旧帖] 添加中断项后的返回问题 0.00雪花
发表于: 2011-9-17 02:44 3495

[旧帖] 添加中断项后的返回问题 0.00雪花

2011-9-17 02:44
3495
在虚拟机的单核环境下,运行通过。但是和ring3交互总是出问题
IDTENTRY IdtEntry = {0};
        IdtEntry.DPL = 3;
       
        IdtEntry.LowOffset = (USHORT)ulFunAddr;
    IdtEntry.HiOffset = (USHORT)(ulFunAddr >> 16);
        IdtEntry.P = 1;
        IdtEntry.segment_type = 0xe;
        IdtEntry.selector = 0x8;
        IdtEntry.system_segment_flag = 0;
        IdtEntry.unused_lo = 0;

        __asm
        {
                cli
            push eax
                mov eax,cr0
                and eax,not 0x10000
                mov cr0,eax
                pop eax
        }
        *(IDTENTRY *)ulINT24 =IdtEntry;
        __asm
        {
           push eax
                   mov eax,cr0
                   or eax,0x10000
                   mov cr0,eax
                   pop eax
                   sti
        }

上边是我的添加int 0x24号中断。。

然后从ring0返回ring3是ring0的堆栈已经在图中给你,我发现堆栈地址从高到低是ss,esp,eflags,cs,eip,ebp 。。
问题就出来ring0返回ring3,返回ring3后程序自动退出,int 0x24后边的语句不再执行。。
ring3层的调用代码:
__asm int 0x24
    __asm nop //od和windbg配合的时候从内核返回到用户空间,od显示的是int 0x24往后推两个字符,并且od标明程序的状态是已结束。。
       
        DWORD dwNum = 0;
        __asm mov dwNum,eax //程序是想利用int中断来进行驱动和用户程序的交互数据,但还没交互,就卡在添加中断上了,神伤呀!!!
                printf("%d\n",dwNum);
        getchar();//什么getchar(),sleep(),MessageBox 函数,还有cmd.exe启动用户程序,这些方法都用了,可是都没有执行int 0x24后边的代码,程序自动退出。。

看雪牛人很多,帮帮小菜。。明早考试,今晚却把时间都霍腾在这上边。。哎。。不爽。。

[课程]FART 脱壳王!加量不加价!FART作者讲授!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 8865
活跃值: (2379)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
2
中断代码捏?
2011-9-17 05:07
0
雪    币: 668
活跃值: (2597)
能力值: ( LV11,RANK:190 )
在线值:
发帖
回帖
粉丝
3
中断历程就是简单的打印kdPrint(("进入中断历程\n")); __asm iretd;
2011-9-17 05:13
0
游客
登录 | 注册 方可回帖
返回
//