查看内存中的双变量

时间:2016-10-03 21:03:58

标签: c++ memory double cheat-engine

我正在研究程序如何在内存中保存数据。 所以我创建了一个包含全局双变量的简单程序:

#include <iostream>
#include <conio.h>

using namespace std;

double b = 512;

int main(){
    getch();
    return 0;
}

当我想从任何读取内存的程序(在我的案例中为CheatEngine)中搜索内存中的这个双变量时,我看到一些不清楚的东西。

CheatEngine在内存中找到512:

Fiddle

当我将其转换为十六进制时,它会显示:

1st Picture

当我在内存中浏览此变量的位置时,它就像:

2nd Picture

所以我将512从十进制转换为十六进制,它是200,但在第二张图片中没有类似的200。

第二张图片中的4080000000000000是多少以及它是如何等于512的?

2 个答案:

答案 0 :(得分:7)

4080000000000000是+512.0的双重表示。 double在内存中用符号,指数和尾数表示。

       4   0   8         0     00       00       00       00       00        00
 0    100 00001000     0000 00000000 00000000 0000000 000000000 00000000 00000000
 ^    ------------     ----------------------------------------------------------
 |        
sign  exponent = 2^9   mantissa with implicit high bit = 1 (normal)

所以代表的数字是2 ^ 9 * 1.0 = 512.0。

注意

  • (408) 16 = 1032
  • exponent = 2 ^(1032 - 1023)= 2 ^ 9,其中1023是指数偏差

答案 1 :(得分:1)

正如Jean-Francoise指出的那样,记忆中的整数和floating point数字表示是不同的。

double数据类型是64位宽的浮点数,同时0x200是512的整数表示。

您还可以使用GDB检查程序的内存内容,同时启用调试信息以包含在程序中。