hardcorn
驱动牛犊
驱动牛犊
  • 注册日期2008-04-17
  • 最后登录2011-03-22
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望4点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:3405回复:2

关于:ProbeForRead

楼主#
更多 发布于:2008-10-29 10:56
水平太采,请大家见量。


我要在内核层读取 应用层进程空间的内存。

在读取前我用ProbeForRead 检查内存是否可读, 可是在调这个方法时就直接产生了异常!

而我的try catch并没有能捕获这个异常...
__try {

    ProbeForRead ( pos, 100, 100); //<<直接在这里发生异常,而我的代码并没捕获到
    
    for ( ii = 0; ii < 100; ii++ )
    {
        pos[ii];
        ...
    }
} __except (EXCEPTION_EXECUTE_HANDLER) {
    DbgPrint("Exception");
}


还有,我是用windbg在调试状态下走这段代码的,异常直接被windbg捕获,并没有进入我的__except()

这是什么原因? 应该用什么方法来判断用户空间的代码是否可读?
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2008-10-29 13:07
对齐有问题,一般为1,2,4,8,16,不然会进入 ExRaiseDatatypeMisalignment,自己反汇编看下,很简单。
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
hardcorn
驱动牛犊
驱动牛犊
  • 注册日期2008-04-17
  • 最后登录2011-03-22
  • 粉丝0
  • 关注0
  • 积分3分
  • 威望4点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2008-10-29 13:38
引用第1楼wowocock于2008-10-29 13:07发表的  :
对齐有问题,一般为1,2,4,8,16,不然会进入 ExRaiseDatatypeMisalignment,自己反汇编看下,很简单。


多谢大牛指导啊,我试试去...
游客

返回顶部