Re: 调试dll程序总是收到访问违规异常
C/C++本地代码调试
调试dll程序总是收到访问违规异常
Abstr
2015-03-05, 17:18 下午
我写了一个简单的调试器,用createprocess的方式启动被调试程序,正常的在exe中下断都没有问题,可以正常的执行。但是,在被调试程序调用的dll里面特定位置下断的时候,会有问题。持续收到访问违规的异常。
我调试了代码,发现当我在DllMain函数的入口点下断时会发生这个问题。一旦在这个地址下断,可以正常收到断点命中的调试事件,当我将保存的字节回写回去,恢复执行之后就开始不停收到访问违规的异常。不停收到这个异常是因为我没有对访问违规事件做处理。
问题简单来说就是我在DllMain入口处下断,恢复断点后,就访问违规了。哪位来不吝赐教一下?叩首百拜。
Re: 调试dll程序总是收到访问违规异常
Abstr
2015-03-05, 17:51 下午
补充:我是在被调试的初始端点处,开始设置断点的,这个时候被调试程序应该还没有调用loadlibray函数载入dll,后面可以命中DllMain入口函数的断点也证明了这一点。dll是在断点设置之后才被载入的。这里我有一个想法,是不是因为dll还没有载入,所以对应的dll地址也是非法的,我写了对应的地址,是不是就触发了异常?
初始断点触发时,dll 应该已经被load了,上面的说法似乎不成立,谁来指导一下啊
Re: 调试dll程序总是收到访问违规异常
Bombs
2015-03-05, 17:55 下午
use windbg to debug ur debugger.
Re: 调试dll程序总是收到访问违规异常
Abstr
2015-03-05, 17:57 下午
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.
Re: 调试dll程序总是收到访问违规异常
格蠹老雷
2015-03-07, 09:39 上午
楼主能否头透漏下写调试器的原因么,玩玩还是真用场?Bombs的建议是王道
Re: 调试dll程序总是收到访问违规异常
Abstr
2015-03-09, 15:37 下午
多谢张老师,确实是要使用到调试器相关知识处理问题。
上面说的问题,我已经有点眉目了。
简单的说下问题:
我在DllMain位置下断,
1、第一次接收到调试事件后返回DBG_NOT_HANDLED
2、异常返回程序执行SEH的处理代码
3、第二次接收到调试事件恢复断点
问题就出在第2和第3步之间,我用windbg反汇编了DllMain代码,发现__DllMainCRTStartup调用DllMain之前使用了__try包裹这段代码,之所以我在DllMain设置的断点和其他位置的断点表现的差异,应该出在SEH处理代码这里,有可能__DllMainCRTStartup捕获了这个异常,没作处理然后又抛了另外一个异常出来。这就导致我没受到DllMain断点第二次命中事件之前,就收到了另外一个异常,最后导致堆破坏错误。
请张老师看下,我说的是否有问题。