gpt4 book ai didi

c++ - 取消引用存储在寄存器中的指针(Visual Studio)

转载 作者:行者123 更新时间:2023-11-30 17:03:12 25 4
gpt4 key购买 nike

我正在调试应用程序,需要查看 rcx 中存储的值所指向的内存区域。通常,对于代码,这可以通过选择变量(指针)并添加快速监视以及从指针开始监视的元素数量来完成:

quickwatch

我想在下面的代码中获取指向 rcx 中移动的字符串的指针:

#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 中的值(value)呢?

我尝试添加:

[rcx]
[rcx],10
rcx,10

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

不允许输入名称

最后我无法取消引用rcx,它像以前一样显示。

编辑:

将 rcx 中的值转换为所需的类型是可行的。在上述情况下,将在 (char*)rcx 上添加快速监视,以在调试窗口中显示整个字符串。对于其他类型(即整数),还需要在监视中指定元素的数量,否则仅显示第一个值。例如,(int*)rcx, 10 显示从 rcx 中存储的地址值开始的 10 个四字节整数。必须针对寄存器中存储的每个数据调整类型。

最佳答案

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

*(size_t*) rcx

关于c++ - 取消引用存储在寄存器中的指针(Visual Studio),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36246692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com