如何用vs查看结构体布局

今天遇到一个问题:
假设在每个系统的structA 结构不同,我们在windbg看了以后直接拿来用,自己定义成结构体,如何来验证这个结构体内存布局是否和windbg一致。
当然笨办法是自己一个个成员数过去,然而人眼总有看错的时候,你承认吧~~。这里用一个极其巧妙的方式解决这个问题
在vs当前工程中,添加了结构体定义,并编译成功后,解决方案视图,工程 右键 -> 属性 -> C/C++ -> 命令行 -> 其它选项 加入
/d1reportSingleClassLayoutstructA
注意structA可以是任何类名、结构体名、联合体 等结构型结构,注意structA之前并没有空格
这是输出某个结构体内存布局的方式,如果要输出所有工程引用到的结构体布局,则可以用
/d1reportAllClassLayout
结果会非常庞杂

挺好用的,针对vc6编译器以上版本有效(我的vc6编译器版本为12.00.8168)

https://www.0xaa55.com/forum.php?mod=viewthread&tid=1547&extra=page%3D4

时间: 2024-08-03 11:56:11

如何用vs查看结构体布局的相关文章

linux中查看结构体和宏

1.进入目录/usr/include cd /usr/include/ 2.生成ctags文件sudo make ctags -R 3.vim -t 结构体(宏)名称 4.找到相应的宏或者结构体 5.Ctrl+] 跳转到下一个位置(此时将光标移动到相应的结构体或者宏)Ctrl+t  跳转到上一个位置(此时将光标移动到相应的结构体或者宏)

9.Go语言基础之结构体

Go语言中没有类的概念,也不支持"类"的继承等面向对象的概念. Go语言中通过结构体的内嵌再配合接口,比面向对象具有更高的扩展性和灵活性. 1.类型别名和自定义类型 1.1自定义类型 在Go语言中有一些基本的数据类型,如string,整型,浮点型,布尔等数据类型,Go语言中可以使用type关键字来定义自定义类型. 自定义类型是定义了一个全新的类型.我们可以基于内置的基本类型定义,也可以通过struct定义. //将MyInt定义为int类型 type MyInt int 通过Type关

Go语言结构体(struct)

Go 语言结构体 Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型. 结构体是由一系列具有相同类型或不同类型的数据构成的数据集合. 结构体表示一项记录,比如保存图书馆的书籍记录,每本书有以下属性: title       :书名 author   :作者 address       :地址 mobile         :手机号 publisher     :出版社 定义结构体 结构体定义需要使用 type 和 struct 语句.struct 语句定义一个

C语言结构体在内存中的存储情况探究------内存对齐

条件(先看一下各个基本类型都占几个字节): void size_(){ printf("char类型:%d\n", sizeof(char)); printf("int类型:%d\n", sizeof(int)); printf("float类型:%d\n", sizeof(float)); printf("double类型:%d\n", sizeof(double)); return; } 结果: 先来一下, 这个结构体在内

go语言之行--结构体(struct)详解、链表

一.struct简介 go语言中没有像类的概念,但是可以通过结构体struct实现oop(面向对象编程).struct的成员(也叫属性或字段)可以是任何类型,如普通类型.复合类型.函数.map.interface.struct等,所以我们可以理解为go语言中的“类”. 二.struct详解 struct定义 在定义struct成员时候区分大小写,若首字母大写则该成员为公有成员(对外可见),否则是私有成员(对外不可见). type struct_variable_type struct { mem

飞控入门之C语言结构体、枚举

结构体 先来说明一下,结构体存在的意义.比如说有一只猫,要在C语言程序中综合描述它,那么可以这样说,它的体重是float类型的,颜色是char类型的,它的一些食物名字是一个数组,那么如果分开定义这些变量,他们将是零散的,只能通过命名放我们看起来方便一些,但是C语言为我们准备的结构体变量便很好的解决了这个问题. 结构体的声明 struct book{ float price; char title[MAXTI]; char author[MAXAU]; }; 这样来看,一个要被描述的事物的多种属性

golang 使用reflect反射结构体

"反射结构体"是指在程序执行时,遍历结构体中的字段以及方法. 1.反射结构体 下面使用一个简单的例子说明如何反射结构体. 定义一个结构体,包括3个字段,以及一个方法. 通过reflect包,首先查看这个结构体对应的动态类型reflect.Type和动态值reflect.Value,并查看这个结构体对应的基本类型. 接着查看结构体的字段数量,并遍历每个字段. 打印每个字段的类型.值.以及tag标签. 最后,调用结构体中的方法,并打印返回结果. 具体代码如下. package main i

VC中结构体的内存布局

看了 VC++中内存对齐 这篇文章,感觉说复杂了,根据我的总结,要算出结构体的内存大小和偏移量,只要清楚结构体各成员的内存布局就行了,下面介绍一下我总结的规则,有不对之处,欢迎回复. 1.实际PACK值根据默认值.声明值.成员值的最小值得到.默认值在32位系统中为4,声明值则是使用#pragma pack(n)声明的值,如没有则忽略,成员最小值则是指结构体中最大的一个数据类型的大小,如int为4,short为2...,举例: #pragma pack(8) struct sta { char a

Visual Studio 调试中将结构体指针转换为结构体数组查看

Visual Studio 调试中将结构体指针转换为结构体数组查看 1. 首先,我们在调试过程中,发现一个指针,无法显示其数组形式,很难受... 2. 将其添加到"监视"窗口 3. 修改监视的值,后面加上查看的索引个数 4. 其转化为数组 原文地址:https://www.cnblogs.com/onetrainee/p/12232646.html