最近把windbg插件0cchext升级到1.0.19.1,完善了autocmd命令,并且增加了accessmask,oledata和cppexcr命令。
autocmd更新:
现在支持全局自动运行命令,区分应用层调试和内核调试,并且区分了普通调试和DUMP分析,配置文件依然是插件同目录下的autocmd.ini。
[all] ? 88 * 66
[kernel] !process 0 0 explorer.exe
[kernel dump] !analyze -v
[notepad.exe] .sympath+ c:\notepad_pdb ~*k
[calc.exe] .sympath+ c:\calc_pdb ~*k
[calc.exe dump] .excr
|
在[all]区间的命令,会在所有情况下执行;[kernel]区间的命令会在内核调试的情况下执行;[kernel dump]区间的命令会在内核调试dump的情况下执行;[app.exe]区间是在调试某exe的时候执行;最后[app.exe dump]命令会在调试指定exe的dump的时候执行。
accessmask命令:
这个命令很简单,就是查询权限标志的,例如
0:000> !accessmask process 0x1fffff Access mask: 0x1fffff
Generic rights: STANDARD_RIGHTS_READ (0x20000) STANDARD_RIGHTS_WRITE (0x20000) STANDARD_RIGHTS_EXECUTE (0x20000) STANDARD_RIGHTS_REQUIRED (0xf0000) STANDARD_RIGHTS_ALL (0x1f0000) READ_CONTROL (0x20000) DELETE (0x10000) SYNCHRONIZE (0x100000) WRITE_DAC (0x40000) WRITE_OWNER (0x80000)
Specific rights: PROCESS_QUERY_LIMITED_INFORMATION (0x1000) PROCESS_SUSPEND_RESUME (0x800) PROCESS_QUERY_INFORMATION (0x400) PROCESS_SET_INFORMATION (0x200) PROCESS_SET_QUOTA (0x100) PROCESS_CREATE_PROCESS (0x80) PROCESS_DUP_HANDLE (0x40) PROCESS_VM_WRITE (0x20) PROCESS_VM_READ (0x10) PROCESS_VM_OPERATION (0x8) PROCESS_CREATE_THREAD (0x2) PROCESS_TERMINATE (0x1) PROCESS_ALL_ACCESS (0x1fffff)
|
其中第一个参数是对象类型,比如process,thread,file;第二个参数则是具体要查询的值。
oledata命令:
这个命令是方便我们当前线程查询com和ole相关结构的命令,不需要参数。
0:000> !oledata dt combase!tagSOleTlsData 0x0000019370ad0360 dx (combase!tagSOleTlsData *)0x0000019370ad0360 0:000> dt combase!tagSOleTlsData 0x0000019370ad0360 +0x000 pvThreadBase : (null) +0x008 pSmAllocator : (null) +0x010 dwApartmentID : 0x1e3d4 +0x014 dwFlags : 0x81 +0x018 TlsMapIndex : 0n0 +0x020 ppTlsSlot : 0x00000018`66fc9758 -> 0x00000193`70ad0360 Void +0x028 cComInits : 3 +0x02c cOleInits : 0 +0x030 cCalls : 0 ...
|
另外可以看调试COM的一个tip来简单了解以下这个命令的用途
cppexcrname命令:
这个命令用于查询C++ 异常名
0:000> .exr -1 ExceptionAddress: 74e61812 (KERNELBASE!RaiseException+0x00000062) ExceptionCode: e06d7363 (C++ EH exception) ExceptionFlags: 00000001 NumberParameters: 3 Parameter[0]: 19930520 Parameter[1]: 006ff46c Parameter[2]: 00372294 0:000> !cppexcrname Exception name: .?AVexception@std@@
|
这个的详情可以参考C++异常的参数分析(0xE06D7363)