关于在Windows 8.1预览版上OD无法启动程序进行调试的问题

在Windows 8.1 Preview x64上,OllyDbg如果试图启动一个程序进行调试,会出现一个死在ntdll.RtlUserThreadStart的单步异常:

这个问题其实是由内核在创建进程时引发的,内核如何做的我没仔细看,就在创建进程后,内核把LdrInitializeThunk中执行ZwContinue的CONTEXT结构体的EFlags设置加上了TF(单步)标志,使得ZwContinue设置CONTEXT跑去执行RtlUserThreadStart的一条指令后就中断了,而又没有异常处理去Skip这个异常,就出现了无法调试的问题。
修复这个问题很简单,设置OD停在系统断点,然后把ZwContinue的CONTEXT中的EFlags改成202而不是默认的302即可,如下图:


这样F9后就能停在入口点了。还是希望8.1的RTM能修复这个问题。

还有大家需要注意下目前x64上32位程序在切内核时跟x86的异同。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值