fire2fire
驱动牛犊
驱动牛犊
  • 注册日期2004-03-04
  • 最后登录2013-04-07
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:1372回复:8

请教Ring0问题

楼主#
更多 发布于:2005-02-12 21:56
1.怎样给Ring0程序传递参数?

2.Ring0程序段中能使用SEH吗?
{
    DWORD dwRing0CodeAddr;
    g_dwBuffer  = (DWORD)lpBuffer;
    g_dwAddress = dwAddress;
    g_dwLen     = dwLen;

    __asm
    {
        mov     eax, offset Ring0Code_Start
        mov     dwRing0CodeAddr, eax
        jmp     Ring0Code_End

Ring0Code_Start:
        cli
        push    offset m_SEHandler
        push    fs:[0]
        mov     fs:[0], esp

        jmp     near j_Start

m_SEHandler:
        pop     eax
        pop     ebx
        mov     fs:[0], eax
        mov     g_dwRet, 0

        sti
        retf

j_Start:
        cld
        mov     ecx, g_dwLen
        mov     edx, ecx
        shr     ecx, 2

        mov     esi, g_dwAddress
        mov     edi, g_dwBuffer
        rep     movsd
        
        mov     ecx, edx
        and     ecx, 0x3
        rep     movsb

        pop     eax
        pop     ebx
        mov     fs:[0], eax
        mov     g_dwRet, 1
        sti
        retf
Ring0Code_End:
    }

    return Ring0Exec((DWORD)dwRing0CodeAddr, 0x1000) & g_dwRet;
}

上面的程序段回蓝屏,是什么原因呢?

谢谢大家,我的qq:275804080

[编辑 -  2/16/05 by  fire2fire]
fire2fire
驱动牛犊
驱动牛犊
  • 注册日期2004-03-04
  • 最后登录2013-04-07
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-02-12 22:04
以上程序段是读取任意线性地址的指定长度的数据,用VC调试,如果该线性地址不存在,调试器会停在m_SEHandler处,(难道此处不是在Ring0了)?如果直接运行,则会立即重启!

[编辑 -  2/12/05 by  fire2fire]
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-02-13 17:12
你这段程序是在驱动中吗?怎么运行,在什么环境,没有上下文无法考虑
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
fire2fire
驱动牛犊
驱动牛犊
  • 注册日期2004-03-04
  • 最后登录2013-04-07
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-02-13 20:03
Ring0Exec((DWORD)dwRing0CodeAddr, 0x1000)
是在Ring0中运行dwRing0CodeAddr开始处0x1000字节的代码。
不是在驱动程序中,是通过调用门进入Ring0运行的。
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-02-14 17:18
Ring0Exec((DWORD)dwRing0CodeAddr, 0x1000)
是在Ring0中运行dwRing0CodeAddr开始处0x1000字节的代码。
不是在驱动程序中,是通过调用门进入Ring0运行的。

那么肯定你在win9x下执行这段代码了?
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
5楼#
发布于:2005-02-15 12:08
1.怎样给Ring0程序传递参数?
在X86-32下的CALLGATE中可以指定传递参数个数,可以最多拷贝32个参数由RING3堆栈到RING0堆栈,但你在RETF返回的时候必须自己平衡堆栈.
在X86-64下的CALLGATE不支持堆栈间的参数拷贝,不过你可以在RING0中访问RING3堆栈,所以也没影响.

2.Ring0程序段中能使用SEH吗?
可以,SEH是由OS来实现,FS:[0]来实现,而RING3,和RING0的FS指向不同的SEH连表....
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-02-16 09:05
1.怎样给Ring0程序传递参数?
在X86-32下的CALLGATE中可以指定传递参数个数,可以最多拷贝32个参数由RING3堆栈到RING0堆栈,但你在RETF返回的时候必须自己平衡堆栈.
在X86-64下的CALLGATE不支持堆栈间的参数拷贝,不过你可以在RING0中访问RING3堆栈,所以也没影响.

2.Ring0程序段中能使用SEH吗?
可以,SEH是由OS来实现,FS:[0]来实现,而RING3,和RING0的FS指向不同的SEH连表....
 

首先,我觉得应搞清楚他要怎么样进ring0,在什么操作系统,9x下通过后门可以进入,nt下一般要用驱动程序,(否则通过ntvdm),调用门的事情,只有有ring0许可才可以干!
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
7楼#
发布于:2005-02-16 10:21
[quote]1.怎样给Ring0程序传递参数?
在X86-32下的CALLGATE中可以指定传递参数个数,可以最多拷贝32个参数由RING3堆栈到RING0堆栈,但你在RETF返回的时候必须自己平衡堆栈.
在X86-64下的CALLGATE不支持堆栈间的参数拷贝,不过你可以在RING0中访问RING3堆栈,所以也没影响.

2.Ring0程序段中能使用SEH吗?
可以,SEH是由OS来实现,FS:[0]来实现,而RING3,和RING0的FS指向不同的SEH连表....
 

首先,我觉得应搞清楚他要怎么样进ring0,在什么操作系统,9x下通过后门可以进入,nt下一般要用驱动程序,(否则通过ntvdm),调用门的事情,只有有ring0许可才可以干! [/quote]
nt下通过\\DEVICE\PHYSICALMEMORY即可在GDT上生成CALLGATE,而NTVDM的方法已经被MS在XP-SP2里禁止了.
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
fire2fire
驱动牛犊
驱动牛犊
  • 注册日期2004-03-04
  • 最后登录2013-04-07
  • 粉丝0
  • 关注0
  • 积分30分
  • 威望3点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-02-16 20:44
谢谢楼上的,能不能加你qq?
怎么给你加分呢?

我曾经尝试在调用门里面设置了参数,然后在Ring3堆栈压如了指定个数的参数,进入ring0后不过好像不行~

在Ring0中使用SEH,堆栈怎么平衡不太清楚,帮我看看上面的程序中的SEH处理程序的问题?
游客

返回顶部