2011-08-05 15 views
2

私は、ゲームのメモリ値を検査するプロジェクトのソースコードを持っています。私が理解できないことはこれです:著者はどのようにしてこれらの価値のタイプと場所を正確に決定しましたか?メモリ値の検査

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; 

彼はこのアドレス0x3BC2060でそれを探して、それのサイズは0x8B8次のとおりです。たとえば、ここで彼は、定義された構造体です。私はプログラムを実行し、この場所の記憶を見て、確かに、私は名前のプロパティのようなものを特定することができましたが、彼はこれをどのようにして正確に見つけましたか?

ありがとうございました。

+1

、原理的には、それがどのように機能するかを理解するのに役立ちます。 –

答えて

5

私は、これはストレートを取得願っています:

あなたは0x3bc2060を見て、次の0x8b8バイト/オクテット。 このような構造体をリバースエンジニアリングするには、この構造体を使用してプログラム内のさまざまなフィールドの値を入力することが重要です。

次に、0x3bc2060から始まる多くのダンプと、次の0x8b8バイトである を推測することができます。

しかし、いくつかのフィールドは明らかに割り当てられないので、予想通り正確ではありません。これらはchar unknown []です。

構造体の逆を行うことは非常に面倒な作業であり、あなたがあなたのデバッガで多くの忍耐を必要とする;)

希望これは彼がデバッガを使用