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

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

抱歉,如果我 应该 知道这一点,但我知道如果可能(我假设是),其他人会立即知道,然后我就可以知道为将来。但是有没有可能把这两个命令合二为一呢?

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

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

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

?? (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 "%ma\n", @$t2
BlahBlahBlah

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

r? @$t2 = @@masm(@@c++(this->m_pSession->m_SessionContext._Mypair._Myval2._Bx._Buf));.printf "%ma\n", @$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 ?