约有 1,303 项符合查询结果, 以下是第 66 - 131项。
费时 < 1 秒。
是<font color=yellow>因为每个页目录项(PDE)是4个字节大小,除以4得到的是对应表项在页目录表中的表项序号</font>。[此回答不当,见下面的帖子,是右移2位,取高10位]
Posted in 《软件调试》勘误和意见
by
格蠹老雷
on 2010-07-27
请参见下面的帖子:
http://advdbg.org/forums/1776/ShowPost.aspx
Posted in 《软件调试》答疑
by
格蠹老雷
on 2010-07-23
多谢关注。一度很喜欢AI这个领域,尤其喜欢其中的方法学,曾经对语音合成很感兴趣,但是只是做了些简单应用...
很久以前的事了,现在很少直接接触了,但是里面的思想方法对于很多问题都是有帮助的。
Posted in Windows内核调试
by
格蠹老雷
on 2010-07-14
下面是勘误表的地址:
http://advdbg.org/books/swdbg/errata.aspx
对于这个dec ebx,这个地方没有错,就是这个样子,不过书中如果解释一下为什么不是EIP,而是EBX就好了。
这里要用执行上下文的思路来考虑,因为断点异常,CPU中断到异常处理函数了,即KiTrap03,这时需要递减的应该是要保存到线程上下文中的EIP,而不是CPU的当前EIP,如果当前EIP被减一,那么相当与让CPU立刻后退一步,那么要么死循环,要么就非法指令了。因此这地方是把异常发生时CPU压到栈上的地址先放到EBX,然后作为参数调用CommonDispatchException,后者会将这个地址放到异常结构中。
看的很仔细,多谢反馈 :-)
Posted in 《软件调试》勘误和意见
by
格蠹老雷
on 2010-07-11
楼主很细心,底层基础也很不错。
对于第一个问题,OD应该没有错,估计是断点处的指令比较长,不少于四个字节,建议楼主用u命令验证一下。
第二个问题似乎是误报:
kd> ba e1 nt!NtCreateFilekd> gSingle step exception - code 80000004 (first chance)First chance exceptions are reported before any exception handling.This exception may be expected and handled.nt!NtCreateFile:83258c7f ...
Posted in Windows内核调试
by
格蠹老雷
on 2010-07-03
很正常啊。第一次执行.reload时,搜索的符号路径是:
SRV*d:\symcache*http://msdl.microsoft.com/download/symbols
下游符号库的路径是d:\symcache,因此WinDBG搜索这个目录时是按搜索下游符号库的方式来搜索的,即自动组件全路径:
xxx.pdb\guid+age\xxx.pdb
第二次.reload时,虽然把d:\symcache设置成了普通符号文件路径(使用.sympath),但是因为这个目录刚才做过下游符号库,其中留用标志文件(pingme.txt),所以WinDBG还是以下游符号库的方式来搜索这个目录。
建议把下游符号库和普通的符号文件目录分开,不要放在一起,以免混淆。有《软件调试》的朋友,可以读一下30 ...
Posted in WinDbg
by
格蠹老雷
on 2010-07-03
缺少符号文件,建议先解决符号问题,然后进一步分析栈回溯,可以使用.symfix c:\symbols命令来设置使用符号服务器
Posted in Windows内核调试
by
格蠹老雷
on 2010-06-28
用!exchain命令可以显示FS[0]链条:
0:000> !exchain0007ffb0: notepad!_except_handler3+0 (010075ba) CRT scope 0, filter: notepad!WinMainCRTStartup+18d (0100752a) func: notepad!WinMainCRTStartup+1a1 (0100753e)0007ffe0: ...
Posted in Windows内核调试
by
格蠹老雷
on 2010-06-21
在编译时,可以在链接选项中为每个模块指定加载地址(Output > Base Address),这个地址会被保存到模块的PE文件头结构中。运行时,进程加载器(Loader)会根据进程空间的实际情况和模块中的基地址信息来选择合适的加载位置。
如果模块中登记的基地址位置没有被占用,可以容纳下这个模块,而且当前进程没有启用ASLR(Address space layout randomization),那么加载器便会把这个模块加载到这个地址。如果占用了,那么只好找别的地方。如果启用了ASLR,那么加载器会努力让每次加载的位置不一样,目的是增强安全性。
如此看来,对于同一个程序,同一个模块可能加载到相同的位置,也可能加载到不同的位置,都是很正常的.
Posted in 《软件调试》的示例程序
by
格蠹老雷
on 2010-06-20