【问题标题】:Windbg syntax - combining two commands (MASM and C++) into oneWindbg 语法 - 将两个命令(MASM 和 C++)合二为一
【发布时间】:2020-05-15 09:45:06
【问题描述】:

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

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

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

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

但这并不是我真正的目标......这是一个花言巧语,任何指针都非常感谢。

【问题讨论】:

    标签: c++ syntax windbg masm


    【解决方案1】:

    我不知道为什么要使用复杂的策略
    希望大家了解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 ?
    

    【讨论】:

    • 谢谢 - 是的,我似乎看不到树木的树林 - 你的演员 (char *) 和 da 都适合我的目的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-13
    相关资源
    最近更新 更多