检查内存值

use*_*064 2 c c++ memory

我有一个项目的源代码,用于检查游戏的内存值.我不明白的是:作者如何精确地确定这些值的类型和位置?例如,这是他定义的结构:

typedef struct {
    UInt16 times_used; // 0x0
    UInt16 token; // 0x2
    SInt16 previous_id; // 0x4
    SInt16 next_id; // 0x6
    SInt32 model; // 0x8
    char unknown00[0x1B]; // 0xC
    UInt8 player_owner; // 0x27
    char unknown01[0x18]; // 0x28
    UInt32 position_x; // 0x40
    UInt32 position_y; // 0x44
    char unknown02[0x1F]; // 0x48
    UInt32 death_type; // 0x69
    char unknown03[0x7]; // 0x6D
    UInt32 destination_x; // 0x74
    UInt32 destination_y; // 0x78
    char unknown04[0x84]; // 0x7C
    UInt32 health_damage; // 0x100
    UInt32 shield_damage; // 0x104
    UInt32 energy_damage; // 0x108
    char unknown05[0x74]; // 0x10C
} Unit;
Run Code Online (Sandbox Code Playgroud)

他在这个地址寻找它,0x3BC2060它的大小是0x8B8.我运行程序并在这个位置观察内存,当然,我可以识别出一些像name属性这样的东西,但他是如何精确地找到它的呢?

谢谢.

Wiz*_*izz 5

我希望我能做到这一点:

你看看0x3bc2060和下一个0x8b8字节/八位字节.要对这样的结构进行逆向工程,通过使用此结构填充其中的不同字段的值来观察程序是至关重要的.

然后,您可以从0x3bc2060开始的许多转储和随后的0x8b8字节推断出发生了什么.

但它并不像你想象的那么精确,因为有些字段显然不可分配.这些是char未知[].

执行结构反转是一项非常繁琐的任务,您需要对调试器有很大的耐心;)

希望这有助于理解它在原理上是如何工作的