0

私のゲーム (Need for Speed: High Stakes) が、ファイルに保存されている 16 進値から、プレイヤーがゲームを起動したときに表示される 10 進値にプレイヤーのお金をどのように変換しているかを理解しようとしています。

周りのデータを見ると、

0x30 00 00 00 00 00 00 00 00 00 00 00 00 00 E0 8B 46
0x40 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

オフセット 3E と 3F に格納されている影響のある値を見つけることができましたが、それらがどのように 16 進数値として取得され、通常の 10 進数値に変換されるのかは謎です。

しばらく 16 進値をいじってみたところ、次のようなパターンを見つけることができました。

Hex    Decimal   
7B 46  16120
8B 46  17904
9B 46  19952
AB 46  22000

興味深いことに、10 進数の AB、9B、8B の値の差は 2048 (うーん、2 のべき乗...) でした。 7Bは1784年…

ここにあるパターンを誰でも見ることができますか? 何か不足していますか?

4

1 に答える 1

2

結局のところ、リバース エンジニアリングするものは何もありませんでした...さまざまなデータ型がどのように機能するのか理解できませんでした :) 金額の値は、実際には int ではなく float として格納されていました。

ファイルからサンプル値を取得します。

0x3C  00 38 7C 46

バイトを逆にして (467C3800 を読み取る)、それを任意のオンライン計算機に差し込むと、16142.0 という合理的な値が得られます。これは、まさに私がそのサンプル値で探していたものです。

float を 16 進値として格納するこのプロセス全体と、IEEE-754 仕様については、この Web サイトでかなり詳しく説明されています。

これが他の誰かに役立つことを願っています!

于 2013-01-28T01:02:18.823 に答える