带“返回值”的WinDBG扩展命令?

WinDbg

带“返回值”的WinDBG扩展命令?


静水流深 2010-06-01, 13:32 下午

如何实现带“返回值”的WinDBG扩展命令?

问题描述:

对于条件判断的 j 命令,比如j ( 1<2 ) 'r esp'。

括号内是一个表达式,请问可否自己编写一个 WinDBG 扩展命令 myExt.dll,

它导出函数UnicodeCompare,可以返回布尔值给WinDBG的命令行。作用是:

当输入!myExt.UnicodeCompare  irpsp->FileObject->FileName  L”test.txt”,假如FileName是值为test.txt的UNICODE字符串,则返回真,否则为假。这样,可以将该命令扩展、 j 命令和断点相结合,形如:

bu `Sfilter.c:XXX` “j (!myExt.UnicodeCompare  irpsp->FileObject->FileName  L”test.txt” ) '.echo catche the File _test.txt_'”

 

作用是,当调试Sfilter.sys时,在Sfilter.cpp:XXX 行下个条件断点,当准备打开test.txt文件时,中断在Sfilter.cpp的XXX行上。

Wdbgexts.h中

#define DECLARE_API(s)                             \

    CPPMOD VOID                                    \

    s(                                             \

        HANDLE                 hCurrentProcess,    \

        HANDLE                 hCurrentThread,     \

        ULONG                  dwCurrentPc,        \

        ULONG                  dwProcessor,        \

        PCSTR                  args                \

     )

采用WdbgExts(c语言函数调用)方式编写如下代码:

CPPMOD

int ext_Test(HANDLE hCurrentProcess,    \

               HANDLE  hCurrentThread,     \

               ULONG   dwCurrentPc,        \

               ULONG   dwProcessor,        \

               PCSTR   args

)

{  dprintf("试图像执行一个表达式后,返回一个值到WinDBG命令行\n");

return 0x13;

}

该代码能够编译通过,但:

1.    不能被识别为一个表达式,因为WinDBG的命令行没有获得返回值。

2.    该代码中的args值无效, 而 DECLARE_API()版本中的args有效。

 

怀疑WdbgExts方式不能实现上述功能,或者连DbgEng方式也不行??? 

Powered by Community Server Powered by CnForums.Net