wind_19

上記は一般のケースでは実行されない部分で、同様の演算を行う箇所が2箇所以上存在する。
他にも、シルビアキャノン、ウィンドヒルのように
風速風向が変化する場合の命令部がこの近辺に存在することは想像できるだろうか
こういった、「想像」が、リバースエンジニアリングでは大きなヒントになる
仮にこの部分の命令部が実行されると仮定する


2行目のJE 47A98にジャンプしない条件の場合、FLOAT 0.10000が絡む計算を行うようだ
これはおそらくナチュラルサーバー仕様だと見ていいだろう
FMULは0.1を掛け算し、FIADD [ARG.20]により最初の風速(9での割り算の余り)に足すのだろう、と見ることができる
FMULは浮動小数点の掛け算、FIADDは浮動小数点に整数を足し算する


次のFLOAT 1.00000が絡む計算は、[ARG20]をレジスタに呼び出してFADD、1.0を足す
この計算により、前回の乱数の割り算の余りの0〜8の値が1〜9になるというわけだ


その後、FCOMP 1.0/9.0、1.0と9.0と比較する命令部が見える。COMPの中身はSUB(引き算)でフラグのみ変化
ロードした数値が1.0以下であった場合、ARG.20に3F80 0000を
9.0以上であった場合にARG.20に4110 0000をぶっこむというわけだ
いちいち解説するまでもないが、3F80 0000は浮動小数点数1.0であるし、4110 0000は9.0である


紹介した画像の下半分はARG.19に対しての同様の処理を行っている。
上半分ではFLD(浮動小数点数に呼び出す)直前にARG.20のときはECXから読み取っていたのが
ARG.19に対してはEDXをMOV→FLDしている。こういった数字の流れを読み取ることで
どんな処理をしているのかを適当に読み取ろう



繰り返すが、重要なことは、実際にどんな動作をしているかを想像することだ
想像力を持って読み取っていくのが重要である

ああ、あと、この内容は違う可能性もあるから鵜呑みにしないで自分で調べて欲しい