在给定字段偏移的情况下确定结构的字段

时间:2012-10-04 20:34:30

标签: c visual-studio debugging struct

让我们说我正在调试优化代码中的崩溃。我查看了反汇编,我看到如下内容:

lea eax,[edi+8Ch] 

现在让我说我知道在edi中存储了什么结构,在这种情况下它是一个有点大的结构。足够大,我无法一眼就看出8Ch偏移对应的字段。

我一直在做的只是在Visual Studio中打开我的监视窗口,并在一个转换的NULL指针上手动执行指针算法(offsetof macro会做什么),直到我得到匹配的那个,但这很乏味。有没有办法可以更快地确定访问哪个字段?

2 个答案:

答案 0 :(得分:3)

在VisualStrudio中,您应该能够“观察”这样的表达式:

(unsigned)&(((StructTypeName*)0)->StructFieldName)

您输入不同的字段名称,直到VS显示正确的偏移值。

您还可以将应用加载到WinDbg(确保已加载符号)并使用dt命令。 WinDbg将使用所有字段的偏移量转储提供的类型/变量名称的布局/内容。

答案 1 :(得分:0)

如果您需要花时间使用此调试方案,我建议您编写一个程序,打印结构字段的所有偏移量,并将它们列在offset; field对中。

我会更进一步编写一个脚本(例如Python),它接受struct的文本并生成一个C代码文件,其中包含所有struct字段的所有offsetof语句。