Advanced Debugging
About AdvDbg Consult Train Services Products Tools Community Contact  
欢迎光临 高端调试 登录 | 注册 | FAQ
 
  ACPI调试
Linux内核调试
Windows内核调试
 
  调试战役
调试原理
新工具观察
 
  Linux
Windows Vista
Windows
 
  Linux驱动
WDF
WDM
 
  PCI Express
PCI/PCI-X
USB
无线通信协议
 
  64位CPU
ARM
IA-32
  CPU Info Center
 
  ACPI标准
系统认证
Desktop
服务器
 
  Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
 
  格蠹调试套件(GDK)
  格蠹学院
  小朱书店
  老雷的微博
  《软件调试》
  《格蠹汇编》
  《软件调试(第二版)》
沪ICP备11027180号-1

C/C++本地代码调试

帖子发起人: Abstr   发起时间: 2015-03-05 17:18 下午   回复: 5

Print Search
帖子排序:    
   2015-03-05, 17:18 下午
Abstr 离线,最后访问时间: 2016/10/9 8:03:06 Abstr

发帖数前50位
注册: 2014-11-05
发 贴: 22
调试dll程序总是收到访问违规异常
Reply Quote
我写了一个简单的调试器,用createprocess的方式启动被调试程序,正常的在exe中下断都没有问题,可以正常的执行。但是,在被调试程序调用的dll里面特定位置下断的时候,会有问题。持续收到访问违规的异常。
我调试了代码,发现当我在DllMain函数的入口点下断时会发生这个问题。一旦在这个地址下断,可以正常收到断点命中的调试事件,当我将保存的字节回写回去,恢复执行之后就开始不停收到访问违规的异常。不停收到这个异常是因为我没有对访问违规事件做处理。
问题简单来说就是我在DllMain入口处下断,恢复断点后,就访问违规了。哪位来不吝赐教一下?叩首百拜。

IP 地址: 已记录   报告
   2015-03-05, 17:51 下午
Abstr 离线,最后访问时间: 2016/10/9 8:03:06 Abstr

发帖数前50位
注册: 2014-11-05
发 贴: 22
Re: 调试dll程序总是收到访问违规异常
Reply Quote
补充:我是在被调试的初始端点处,开始设置断点的,这个时候被调试程序应该还没有调用loadlibray函数载入dll,后面可以命中DllMain入口函数的断点也证明了这一点。dll是在断点设置之后才被载入的。这里我有一个想法,是不是因为dll还没有载入,所以对应的dll地址也是非法的,我写了对应的地址,是不是就触发了异常?
初始断点触发时,dll 应该已经被load了,上面的说法似乎不成立,谁来指导一下啊

IP 地址: 已记录   报告
   2015-03-05, 17:55 下午
Bombs 离线,最后访问时间: 2015/7/6 5:16:30 Bombs

发帖数前75位
注册: 2014-01-16
发 贴: 15
Re: 调试dll程序总是收到访问违规异常
Reply Quote
use windbg to debug ur debugger.
IP 地址: 已记录   报告
   2015-03-05, 17:57 下午
Abstr 离线,最后访问时间: 2016/10/9 8:03:06 Abstr

发帖数前50位
注册: 2014-11-05
发 贴: 22
Re: 调试dll程序总是收到访问违规异常
Reply Quote
I can't use windbg, because I want to design a debugger to do sth. Windbg works well at this point. So I want to know what's the difference between my debugger and windbg.
I use WriteProcessMemory(0xcc) to set breakpoint.

IP 地址: 已记录   报告
   2015-03-07, 09:39 上午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 调试dll程序总是收到访问违规异常
Reply Quote
楼主能否头透漏下写调试器的原因么,玩玩还是真用场?Bombs的建议是王道


IP 地址: 已记录   报告
   2015-03-09, 15:37 下午
Abstr 离线,最后访问时间: 2016/10/9 8:03:06 Abstr

发帖数前50位
注册: 2014-11-05
发 贴: 22
Re: 调试dll程序总是收到访问违规异常
Reply Quote
多谢张老师,确实是要使用到调试器相关知识处理问题。
上面说的问题,我已经有点眉目了。

简单的说下问题:
我在DllMain位置下断,
1、第一次接收到调试事件后返回DBG_NOT_HANDLED
2、异常返回程序执行SEH的处理代码
3、第二次接收到调试事件恢复断点

问题就出在第2和第3步之间,我用windbg反汇编了DllMain代码,发现__DllMainCRTStartup调用DllMain之前使用了__try包裹这段代码,之所以我在DllMain设置的断点和其他位置的断点表现的差异,应该出在SEH处理代码这里,有可能__DllMainCRTStartup捕获了这个异常,没作处理然后又抛了另外一个异常出来。这就导致我没受到DllMain断点第二次命中事件之前,就收到了另外一个异常,最后导致堆破坏错误。

请张老师看下,我说的是否有问题。

IP 地址: 已记录   报告
高端调试 » 软件调试 » C/C++本地代码调试 » Re: 调试dll程序总是收到访问违规异常

 
Legal Notice Privacy Statement Corporate Governance Corporate Governance
(C)2004-2020 ADVDBG.ORG All Rights Reserved.