约有 1,303 项符合查询结果, 以下是第 99 - 131项。
费时 < 1 秒。
今天调试其它问题顺便收集了下面的信息。
系统中是一个四核的CPU,0号的时钟中断ISR是HalpRtcClockInterrupt,而其它三个CPU的时钟中断ISR都是hal!HalpClockInterruptPn:
0: kd> !idt
Dumping IDT:
...
d1: 833a4614 hal!HalpRtcClockInterrupt
df: 833b51c0 hal!HalpApicRebootService
e1: 833b5934 hal!HalpIpiHandler
e3: 833b56d4 ...
Posted in Windows内核调试
by
格蠹老雷
on 2009-03-30
启动初期的表项主要是处理异常的,这些ISR是一样的。差异在处理外部中断的ISR,印象里处理时钟中断的ISR就不一样。
Posted in Windows内核调试
by
格蠹老雷
on 2009-03-29
WinDBG的一个命令行可以包含多条命令,使用分号分开即可。所以你可以类似这样提交命令:
.call xxxx ; g; g;
这样就可以让WinDBG执行好一个命令后自动执行下一个。
Posted in WinDbg
by
格蠹老雷
on 2009-03-29
可以格式化成.call命令,然后用IDebugControl的Execute接口执行。注意,执行.call命令需要私有符号。
Posted in Windows内核调试
by
格蠹老雷
on 2009-03-27
Windows做普通的任务切换时,是不使用CPU的硬件任务切换机制(TR寄存器和TSS),但是在发生双重错误异常和NMI中断时,还是会使用。
LDT是一张表,用来存放段描述符。对于普通的Windows进程,它们都不使用LDT表,NT系列Windows之所以还保持对LDT的支持,主要是为了兼容。
对一个还在学校读书的学生来说,你的问题够深的了。
Posted in WinDbg
by
格蠹老雷
on 2009-03-26
因为这句话中很好的使用了限定语,所以是对的。但这个问题解释起来话很长。简单来说,基于IA-32结构的32位Windows是可以不使用LDT的,因为使用页机制足够了,但是因为16位的Windows(3.x, 9x)使用LDT,为了兼容,NT中还是支持LDT的,或者说还是偶尔使用LDT的,这在很多地方都可以看到影子。比如:内核中有nt!NtSetLdtEntries函数。每个进程的_EPROCESS结构和_KPROCESS中有描述LDT的字段:
lkd> dt _KPROCESS -y ldt
nt!_KPROCESS
+0x020 LdtDescriptor : _KGDTENTRY
lkd> dt _EPROCESS -y ldt
nt!_EPROCESS
...
Posted in WinDbg
by
格蠹老雷
on 2009-03-25
栈回溯就可以生成函数调用序列,例如WinDBG的k系列命令,不过不是严格像楼主说的那种格式。
Posted in WinDbg
by
格蠹老雷
on 2009-03-25
因为PSN功能在今天的IA CPU上已经没有,所以如果你针对的平台是X86,那么CPU ID不适合这样的目的。
Posted in WinDbg
by
格蠹老雷
on 2009-03-24
XP的SP2开始默认启用PAE,观察内核文件的完整文件名就可以知道系统是否启用PAE,比如下面的内核就是PAE版本的:
lkd> lm vm nt
start end module name
804d7000 806cdc80 nt (pdb symbols) d:\symbols\ntkrnlpa.pdb\CF7B79A8CE864FCF8ABF248F0B69F4C91\ntkrnlpa.pdb
Loaded symbol image file: ntkrnlpa.exe
Image path: ntkrnlpa.exe
Image name: ...
Posted in Windows内核
by
格蠹老雷
on 2009-03-24
你说的使用SP寄存器来引用参数和变量的方法就是FPO,PDB中的帧数据表中保存有栈帧的信息,有一类栈帧信息就是专门描述FPO的,帧数据中可以有使用逆波兰式保存的程序(类似脚本),调试器可以根据这样的程序来寻找到合适的栈帧数据,包括栈帧基地址和返回地址等,参见25.8.6节和MSDN中关于IDiaFrameData的说明。
Posted in WinDbg
by
格蠹老雷
on 2009-03-24