Windbg 将两个命令(MASM 和 C++)合二为一

Windbg combining two commands (MASM and C++) into one

本文关键字:MASM C++ 合二为一 命令 两个 Windbg      更新时间:2023-10-16

如果我应该知道这一点,我很抱歉,但我知道其他人会立即知道是否可能(我认为是(,然后我可以知道未来。但是是否可以将这两个命令合并为一个?

0:006> ? @@(this->m_pSession->m_SessionContext._Mypair._Myval2._Bx._Buf)
Evaluate expression: 1628841015336 = 0000017b`3e7d7828
0:006> ?? (char *) 0x0000017b3e7d7828
char * 0x0000017b`3e7d7828
"BlahBlahBlah"

我本身没有问题,按顺序运行它们,但我想我必须能够使用一些非常聪明的东西,比如括号或其他东西?,将第一个包裹在第二个中......但是,无论尝试什么,我只会让 Windbg 抱怨语法错误......这很公平...我过错了。

第一个命令返回我想要的,即char *的地址,但它实际上是否返回您看到的回显到控制台的所有内容,这就是为什么我不能简单地做这样的事情?

?? (char *) (? @@(this->m_pSession->m_SessionContext._Mypair._Myval2._Bx._Buf))

并得到我的"BlahBlahBlah"的回应?还是我只是缺少一些迟钝的 Windbg 语法要求?

我以为我会很聪明并尝试使用伪寄存器,但我认为我不够聪明,因为我现在似乎无法将这两个命令合并为一个:

0:006> r? @$t2 = @@masm(@@c++(this->m_pSession->m_SessionContext._Mypair._Myval2._Bx._Buf))
0:006> .printf "%man", @$t2
BlahBlahBlah

好吧,这实际上是一个谎言 - 如果我这样做,我可以在一个命令中获取它:

r? @$t2 = @@masm(@@c++(this->m_pSession->m_SessionContext._Mypair._Myval2._Bx._Buf));.printf "%man", @$t2

但这不是我真正的目标...这是一个小问题,任何指针都非常感谢。

我不知道为什么要使用可变策略
我希望你理解std::string和sso(短字符串优化(的实现我希望
你明白任何超过阈值的字符串都不能用_Buf
打印,而是需要通过其_Ptr打印

为什么不只使用 C++ 或使用便利函数

尝试以下一些表达式,看看它是否满足需求

0:000> ?? testA._Mypair._Myval2._Bx._Buf
char [16] 0x00000016`32b6f958
105 'i'
0:000> ?? (char *)testA._Mypair._Myval2._Bx._Buf
char * 0x00000016`32b6f958
"i'll be ssoed"
0:000> da @@c++(testA._Mypair._Myval2._Bx._Buf)
00000016`32b6f958  "i'll be ssoed"
0:000> da @@c++(testW._Mypair._Myval2._Bx._Buf)
00000016`32b6f938  "p.Wj&."
0:000> da @@c++(testW._Mypair._Myval2._Bx._Ptr)
00000126`6a579470  "H"
0:000> du @@c++(testW._Mypair._Myval2._Bx._Ptr)
00000126`6a579470  "Hello My Dear World Do You Recog"
00000126`6a5794b0  "nize my wide string ?"

如果您愿意,您也可以为它们添加别名

0:000> as /ma mystr @@(testA._Mypair._Myval2._Bx._Buf)
0:000> al
Alias            Value  
-------          ------- 
mystr            i'll be ssoed 
0:000> .echo ${mystr}
i'll be ssoed
0:000> as /mu mystr @@(testW._Mypair._Myval2._Bx._Ptr)
0:000> al
Alias            Value  
-------          ------- 
mystr            Hello My Dear World Do You Recognize my wide string ? 
0:000> .echo ${mystr}
Hello My Dear World Do You Recognize my wide string ?