如何查看LPVOID类型变量的内容
我有一个 C 函数,它采用 LPVOID 类型的参数。传入的值是 \0 分隔的字符数组。如何在 Visual Studio / Windbg 中转换参数以查看传入值?
I have a C function that takes a parameter of type LPVOID. The values that gets passed in is \0 seperated array of characters. How can I cast the parameter to see the incoming value in visual studio / windbg?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
您可以在脚本中执行此操作。类似下面的内容可以工作,它假设 char * 字符串并且列表以双 NULL 结尾(如 MULTI_SZ):
保存到文本文件,然后在 WinDBG 中运行以下命令:
You can do this in a script. Something like the following would work, which assumes char * strings and that the list ends in double NULLs (like a MULTI_SZ):
Save to a text file and then run the following in WinDBG:
没有任何演员可以让您在观察窗口中观察到这一点。对于 VS,您必须在空分隔块开头的地址上打开一个内存窗口。
在 WinDbg 命令
db
中转储原始内存以及 ASCII 转换。如果块大于 128 字节,则将选项l
添加到命令中。例如,这将为局部变量 pVoid 打印出前 0x200 字节:db poi pVoid l200
There is no cast that would allow you to observe that in watch windows. For VS you will have to open up a memory window on the address at the beginning of the null separated block.
In WinDbg command
db <my_address>
dumps raw memory along with ASCII conversion. If block is larger than 128 bytes, then add optionl
to the command. E.g this will print out first 0x200 bytes for local variable pVoid:db poi pVoid l200
只需转换为
char*
就可以了。Simply casting to
char*
should work.又是一个很晚的答案,但可以利用 Windbg 中的 dpa 来打印列表,
在 somefunc 上设置 bp 或者如果地址上没有符号,例如 bp 401020
在参数上使用 dpa (这里是废话)或使用 dpa @esp+8
假设这里没有符号
again a very late a answer but
dpa
in windbg can be leveraged to print the listset a bp on somefunc or if you do not have symbols on address lik bp 401020
use dpa on the argument (blah here) or use dpa @esp+8
assuming no symbols here