从原始内存和 Class 分析器中推断原始类型
Deducing Primitive Type from Raw Memory and Class Analyzers
规格:
编译器:TDM-GCC 5.1.0
OS: Windows 8.1 64 位
我对 C++ 标准库进行了非常彻底的搜索,还进行了一些其他研究,甚至在某些内联汇编方面达到了顶峰。但是我还没有得出结论,所以这里是:
鉴于我的编译器,如果我知道基本类型的地址和大小,C++(最高 C++14)是否有任何方法可以仅从这些信息中推断出类型,以及查看内存中的原始数据(我也愿意使用内联汇编)?
一个例子:
如果我有以下声明:
float x = 1.0f;
int y = 0x3f800000; //The same raw value in memory as 'x'
有什么办法,只要查看这些变量的原始内容,就可以推断出它们的类型吗?
如果简单的答案是"no",那么请让我给你介绍一下这个问题的背景,也许你能给我指明正确的方向。
简而言之,我正在尝试编写一个可以在运行时 dissect/analyze 和 class 的函数(在最大可能的范围内,假设 C++ 唯一真正的元编程是模板)。我希望能够在给定 class 的实例的情况下确定 class 的成员对象。 "type_traits" 库在这里并没有真正帮助我,'sizeof()' 和 'alignof()' 提供了提示,但它没有足够的信息来推断成员对象。 'typeid()' 没用,因为我正在使用 void 指针,除了获取 class.
的名称
我祈祷 C++ ABI/RTTI 有一些不错的元编程。
简单的答案:
不,此信息不会在运行时提供。但是,您可以通过 alignof()、sizeof() 进行有根据的猜测,并了解特定大小的类型通常使用的值范围。
或创建您自己的倒影API。
规格:
编译器:TDM-GCC 5.1.0
OS: Windows 8.1 64 位
我对 C++ 标准库进行了非常彻底的搜索,还进行了一些其他研究,甚至在某些内联汇编方面达到了顶峰。但是我还没有得出结论,所以这里是:
鉴于我的编译器,如果我知道基本类型的地址和大小,C++(最高 C++14)是否有任何方法可以仅从这些信息中推断出类型,以及查看内存中的原始数据(我也愿意使用内联汇编)?
一个例子:
如果我有以下声明:
float x = 1.0f;
int y = 0x3f800000; //The same raw value in memory as 'x'
有什么办法,只要查看这些变量的原始内容,就可以推断出它们的类型吗?
如果简单的答案是"no",那么请让我给你介绍一下这个问题的背景,也许你能给我指明正确的方向。
简而言之,我正在尝试编写一个可以在运行时 dissect/analyze 和 class 的函数(在最大可能的范围内,假设 C++ 唯一真正的元编程是模板)。我希望能够在给定 class 的实例的情况下确定 class 的成员对象。 "type_traits" 库在这里并没有真正帮助我,'sizeof()' 和 'alignof()' 提供了提示,但它没有足够的信息来推断成员对象。 'typeid()' 没用,因为我正在使用 void 指针,除了获取 class.
的名称我祈祷 C++ ABI/RTTI 有一些不错的元编程。
简单的答案:
不,此信息不会在运行时提供。但是,您可以通过 alignof()、sizeof() 进行有根据的猜测,并了解特定大小的类型通常使用的值范围。
或创建您自己的倒影API。