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

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

2011-9-17 02:45
2794
在虚拟机的单核环境下,运行通过。但是和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后边的代码,程序自动退出。。

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

[培训]科锐软件逆向54期预科班、正式班开始火爆招生报名啦!!!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回