• ベストアンサー

うさみみハリケーン

あるパソコン用のRPGゲームを解析したいと思い、まず始めにHPパラメータを格納しているアドレスを検索したのですが、HPを減らした後に検索するとヒットしません。 (つまり、HP検索→数百件ヒット→HPを減らす→HP検索→該当なし) 「格納されていない」というのはありえないはずです。原因がわかりません。

質問者が選んだベストアンサー

  • ベストアンサー
  • SPROCKETER
  • ベストアンサー率26% (2127/7994)
回答No.2

 プロが作ったゲームをアマチュアが解析しても、プログラムの全容を解明するのは難しいですよ。  HPを格納しているアドレスを見つけようとして、HPの値を減らして変化したメモリーを見つけようということでしょうが、そんなに簡単に見つかるでしょうかね。  たとえば、HPに限らず、必要なパラメータ配列を一旦、スタック領域に退避して使用しているのであれば、毎回、スタック領域が更新されるので、特定出来ない結果になります。つまり、必要に応じて、スタック領域に配列を作る方法です。ベースポインタ(BP)を使えば、アセンブラやCで作れるプログラムです。  この方式は必要に応じてメモリーを使うので、メモリーの節約に役立ちますし、無駄な配列を残す必要がありません。  HPを変化させると発見出来なくなるのは、再実行した段階で配列がクリアされてしまうからでしょう。  スタックを使用した、リエントラント、リカーシブなどのプログラムが有名ですが、アドレスが固定されている配列領域が必ずあるわけではありません。

STOP_0xc000021a
質問者

お礼

回答ありがとうございます。 プログラムはかじった程度なので、もう少し勉強してから実践してみます。

その他の回答 (1)

  • askaaska
  • ベストアンサー率35% (1455/4149)
回答No.1

例えばー HP100を検索するに当たって "100"で検索したのに HPが90になったので さきほどの該当箇所を"90"で検索したら HITしなかった ってことよね? いろいろ考えられるけど 例えばー HPの管理をHPの最大値と受けたダメージで管理しているとかだと 0から10に増えた場所があるんじゃないかな? 例えばー HP100は100ではなく1000として管理されていて ゲーム上では見えていないけど実は小数点以下もダメージ判定があるとか 例えばー HPの格納されている場所が移動したとか そんな妄想してみるの

STOP_0xc000021a
質問者

お礼

わかりやすい回答ありがとうございます。 プログラムはかじった程度なので、もう少し勉強してから実践してみたいと思います。

関連するQ&A