代码之家  ›  专栏  ›  技术社区  ›  Sebi

取消引用存储在寄存器中的指针(visual studio)

  •  2
  • Sebi  · 技术社区  · 8 年前

    我正在调试一个应用程序,需要查看存储在 rcx 通常,对于代码,这将通过选择变量(指针)并添加快速观察以及从指针开始观察的元素数量来完成:

    quickwatch

    我想把指向字符串的指针移入 钢筋混凝土 在下面的代码中:

    #include <stdio.h>
    
    int main() {
    000000013F1217C0  push        rbp  
    000000013F1217C2  push        rdi  
    000000013F1217C3  sub         rsp,0E8h  
    000000013F1217CA  lea         rbp,[rsp+20h]  
    000000013F1217CF  mov         rdi,rsp  
    000000013F1217D2  mov         ecx,3Ah  
    000000013F1217D7  mov         eax,0CCCCCCCCh  
    000000013F1217DC  rep stos    dword ptr [rdi]  
        goto mylabel;
    000000013F1217DE  jmp         $mylabel (013F1217EEh)  
    000000013F1217E0  jmp         $mylabel (013F1217EEh)  
        printf("Skipped\n");
    000000013F1217E2  lea         rcx,[string "Skipped\n" (013F129C28h)]  
    000000013F1217E9  call        printf (013F1211CCh)  
    mylabel:
        printf("goto ftw!\n");
    000000013F1217EE  lea         rcx,[string "goto ftw!\n" (013F129C38h)]  
    000000013F1217F5  call        printf (013F1211CCh)  
        return 0xf00d;
    000000013F1217FA  mov         eax,0F00Dh  
    }
    000000013F1217FF  lea         rsp,[rbp+0C8h]  
    000000013F121806  pop         rdi  
    000000013F121807  pop         rbp  
    000000013F121808  ret  
    

    如何获得rcx所指的值?在汇编中,语法为:

    [rcx+index]
    

    但我怎样才能在visual studio中看到价值呢?

    我已尝试添加:

    [rcx]
    [rcx],10
    rcx,10
    

    在QuickWatch中,但对于前两个条目,我得到了:

    不允许使用类型名称

    最后我不能取消引用 钢筋混凝土 ,如前所示。

    编辑:

    将值转换为 钢筋混凝土 将其转换为所需类型。在上述情况下,将在 (char*)rcx 在调试窗口中显示整个字符串。对于其他类型(即整数),还需要在手表中指定元素的数量,否则只显示第一个值。例如 (int*)rcx, 10 显示从存储在 钢筋混凝土 。必须针对寄存器中存储的每个数据调整类型。

    2 回复  |  直到 8 年前
        1
  •  1
  •   Ivan_a_bit_Ukrainivan    2 年前

    在“Watch#”窗口(菜单 Debug > Windows > Watch > Watch # ),将寄存器强制转换为类型“指针 数据类型 然后取消引用结果。
    示例:取消引用引用的内存 rcx 并将其解释为64位无符号整数:

    *(size_t*) rcx
    
        2
  •  0
  •   Hassen Dhia    8 年前

    使用asm{…}将寄存器的值复制到一个c/c++指针,然后照常观察它。 在这里,您可以找到如何从内联程序集访问c变量: https://msdn.microsoft.com/en-us/library/fabdxz08.aspx