-
-
[旧帖]
添加中断项后的返回问题
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作者讲授!