自己写一个调试器时遇到了问题,麻烦各位帮忙

WinDbg

自己写一个调试器时遇到了问题,麻烦各位帮忙


nightxie 2009-09-24, 18:17 下午

最近自己在写一个调试器,准备山寨Windbg一下,^_^。

不过现在遇到了一个问题。

在ReadProcessMemory时,如果读取被调试的程序模块之内的内存可以成功。

但是在读取被调试程序以外的模块领空,例如该程序的Dll,就不能读取,返回的错误码是12B(仅完成部分的 ReadProcessMemoty 或 WriteProcessMemory 请求。 )。

我也是百思不得其解啊。给几张图说明一下情况(因为百度空间不支持外链,所以请点连接游览)

第一张是正常的,也就是主程序模块的领空。

http://hiphotos.baidu.com/nightxie/pic/item/2d2610870ec27506c75cc3f0.jpg

第二张就是Kernel32.dll的领空,不能Read

http://hiphotos.baidu.com/nightxie/pic/item/e5067d2ca04de9c08b1399f0.jpg

第三张是Windbg,正常分析Kernel32.dll

http://hiphotos.baidu.com/nightxie/pic/item/1e22ba525fb032220df3e3f0.jpg

 

Re: 自己写一个调试器时遇到了问题,麻烦各位帮忙


nightxie 2009-09-24, 23:01 下午
搞清楚了,读取时机不对而已。。。汗~~~

Re: 自己写一个调试器时遇到了问题,麻烦各位帮忙


Thomson 2009-09-24, 23:29 下午
怎么不对??是不是读的时候初始化还没完成?

Re: 自己写一个调试器时遇到了问题,麻烦各位帮忙


nightxie 2009-09-25, 01:34 上午
呵呵,对,就是那样。。。我读的时机是创建进程时,而载入dll是在这之后。。。呵呵,这点没搞清所以搞了好久。。

Re: 自己写一个调试器时遇到了问题,麻烦各位帮忙


Thomson 2009-09-25, 12:58 下午
我以前也遇到这个问题,在debugger loop收到第一个断点就去读debuggee的peb里面的一些信息,在vista+上面都没有问题,但是在vista以下读出的内容都为空,,不知道在debugger loop里面怎么拿到像windbg那样的initial breakpoint.

Re: 自己写一个调试器时遇到了问题,麻烦各位帮忙


格蠹老雷 2009-09-25, 21:39 下午

呵呵,初始断点是新进程开始运行后Hard Code在Loader里的,所以在debugger loop里面等待就可以了...

Powered by Community Server Powered by CnForums.Net