跟了一个晚上,终于解决了

大概要实现的是用这个函数替换ntdll中的KiUserExceptionDispatcher,实现方法如下:

VOID NTAPI KiUserExceptionDispatcher(PEXCEPTION_RECORD pExcptRec,PCONTEXT pContext) { DWORD retValue; if (RtlDispatchException(pExcptRec,pContext)) { retValue=::ZwContinue( pContext,0); }else{ retValue=::ZwRaiseException(pExcptRec,pContext,0); } /*略过.............*/ }

参考:http://www.longene.org/techdoc/0359381001224576966.html

这样看着只是通过KiUserExceptionDispatcher来调用ZwContinue与Zw...函数,看着很正常,几乎网上所有代码都是这个形式来写的(不知道他们是怎么通过的- -!)

运行时就出问题了,当有异常发生时 要么就是在RtlDispatchException里面不出来也没反应,要么就是一直循环的调用他,这个函数是R3异常处理的入口点,只要这里面发生异常还是调用他 - -!

在正常情况下,进入函数第一条指令时:

ESP=返回地址,ESP+X才是参数

..........................................................................

跟到刚刚才发现,跑到函数入口点时[ESP]=第一个参数,[ESP+4]=第二个参数,根本没有返回地址

而自己写的这个函数,永远是[ESP+4]=第一个参数,[ESP+8]=第二个参数.. - -! 这样不错才惨了...

----------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------

这是KiUserExceptionDispatcher,异常无数,但从没见过执行到77C7014A, ZwContinue直接进入内核了,而进ZwRaiseException后,估计程序就崩了,RtlRaiseException这里也是没见执行过的,- - 都摆设..

-----------------------------------------------------------------------------------------------------

问题点找着了,翻遍了GG BING也没见有说无返回地址参数问题,最后为了省事把他当作跳板转到其它函数中处理(没有汇编基础的感觉这方法是最简单*_*-)

VOID NTAPI KiUserExceptionDispatcher_BT(PEXCEPTION_RECORD pExcptRec,PCONTEXT pContext) { DWORD retValue; if (RtlDispatchException(pExcptRec,pContext)) { ::AfxMessageBox("ZwContinue"); retValue=::ZwContinue( pContext,0); }else{ ::AfxMessageBox("ZwRaiseException"); retValue=::ZwRaiseException(pExcptRec,pContext,0); } } VOID NTAPI KiUserExceptionDispatcher(PEXCEPTION_RECORD pExcptRec,PCONTEXT pContext) { __asm { /* -_-! 这里入栈看着有些不顺似的-如果真不会执行到RETN貌似不用压栈也得 */ push [esp+4] push [esp+4] call KiUserExceptionDispatcher_BT /* 看着不顺眼,问题解决就成 - -! */ /*补充:需Release下,Debug栈是乱的*/ } }

哎,真走了不少弯路,当时以为是参数顺序错了..结果_估计_是该函数是由内核空间转入用户空间入口,则无返回地址入栈,网上文章也没细看,问题解决百岁!

---------------------------------------------------------------------------------------------------------------------

注:

RtlDispatchException在Ntdll中未导出,需按各个版本处理该函数地址

处理如下:

typedef NTSTATUS(NTAPI *pRtlDispatchException)(PEXCEPTION_RECORD pExcptRec,CONTEXT * pContext); pRtlDispatchException RtlDispatchException=NULL; /*这是WIN7 64位旗舰版下的地址,也就是在反汇编中看到的第一个Call地址*/ RtlDispatchException=(pRtlDispatchException)0x77CB865B;

经过上面的函数处理,能够捕捉到的异常貌似都能够通过了,然后就能在程序中制造出种种异常,一一奸杀,=_=

转载于:https://www.cnblogs.com/SilenceRet/archive/2010/12/04/6805047.html

Hook KiUserExceptionDispatcher参数指针错误的问题相关推荐

  1. C/C++指针错误与调试相关学习总结

    使用VS2010调试技巧让C指针无处遁形 http://blog.csdn.net/21aspnet/article/details/6723758 Linux 下调试远没有windows下的VS方便 ...

  2. swift函数参数指针传递inout和@escaping冲突的解决方法

    这里写目录标题 需求 解决方法 容易产生的问题 总结 今天深入解决关于函数参数指针的问题.问题是这样,我在swift的一个函数里面,参数里需要传递一个指针类型的Int,但是这个函数里面还有一个逃逸闭包 ...

  3. exc_bad_access(code=1, address=0x789870)野指针错误

    原因: exc_bad_access(code=1, address=0x789870)野指针错误,主要的原因是,当某个对象被完全释放,也就是retainCount,引用计数为0后.再去通过该对象去调 ...

  4. 微信退款参数格式错误

    微信退款失败返回信息是: <xml><return_code><![CDATA[FAIL]]></return_code> <return_msg ...

  5. Soul网关源码阅读番外篇(一) HTTP参数请求错误

    Soul网关源码阅读番外篇(一) HTTP参数请求错误 共同作者:石立 萧 * 简介     在Soul网关2.2.1版本源码阅读中,遇到了HTTP请求加上参数返回404的错误,此篇文章基于此进行探索 ...

  6. autolisp获取目录服务器信息失败,大神们,帮忙看看这个代码哪儿有问题?老是出现“参数类型错误:...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 defun c:ZHDGX() (claim) (command "layer" "m" "dgxj&q ...

  7. php微信支付mch_id参数格式错误,再说一下微信支付踩到的坑 mch_id 参数格式错误...

    微信小程序支付在好久之前写过一次,后来再写的话也是用别人的 SDK 了,之前写的文章好像留了一点坑 博客有发过一篇关于微信小程序支付的文章,见PHP完成微信小程序在线支付功能 贴了代码没有检查,也给 ...

  8. php微信支付mch_id参数格式错误,在.net core上,Web网站调用微信支付-统一下单接口(xml传参)一直返回错误:mch_id参数格式错误...

    一.问题描述 在调用统一下单接口时,报mch_id参数格式错误,但商户ID确实是10位数字正确的,可就是一直报这个错误 返回的错误xml如下: 二.排错过程 1.多次对比官网xml格式,确认生成的xm ...

  9. MyBatis-Plus分页查询where后面的参数拼接错误报### The error occurred while setting parameters

    MyBatis-Plus分页查询条件参数拼接错误! ### The error may exist in file [D:\SourcrGit\IOT_sxx\iot-parent\iot\targe ...

最新文章

  1. 每一个人都是平凡的英雄
  2. 剑指offerpython_剑指offer系列python实现 日更(一)
  3. 10个调试Java的技巧
  4. oracle收发邮件存储过程
  5. html中如何让图片交错,HTML5/Canvas 光圈交错幻觉
  6. c语言5的阶乘流程图_5 种前途迷茫的编程语言
  7. regexbuddy使用记录
  8. C++/C--vector初始化与赋值【转载】
  9. 宏定义 是否retina高清屏,判断当前设备
  10. 前端开发---ppt展示页面评论区展示
  11. PHP 的魔术方法及其应用
  12. iOS9自动布局神器StackView
  13. python模拟浏览器教程_Python使用win32com实现的模拟浏览器功能示例
  14. matlab高斯型积分,电子科大MATLAB第14节高斯型积分程序.ppt
  15. 史上最简单的LSTM文本分类实现:搜狗新闻文本分类(附代码)
  16. 干货 | 还不了解中介调节模型?赶紧收藏本文吧。
  17. 《Linux运维总结:SVN提示Node remains in conflict解决办法》
  18. iOS 15 正式版发布,210 条改进大汇总
  19. ArcGIS教程:确定空间关系
  20. Java多线程探究-死锁原因

热门文章

  1. Python 安装库的方法及解决pip 安装时速度缓慢的方法
  2. 如何在64位Ubuntu16.04下安装java开发环境
  3. 64位ubuntu 12.04编译linux内核提示openssl/opensslv.h文件缺失
  4. 【自动驾驶-Autonomous】自动驾驶定义
  5. Eigen入门之密集矩阵 8 - resharp slicing切片
  6. 在.net中加载dll的一种错误问题原因及处理
  7. React with Webpack - 3: 内联image、font
  8. 【边缘检测】RCF: Richer Convolutional Features for Edge Detection
  9. 这些贷款冷知识你知道多少?
  10. [转] 常见WinCE启动失败原因分析