* ぐいぐい01に関するメモ-16 -(by [[K]], 2008.12.23) -メモのうち重要な部分をそのうちまとめてまともなページを作る *** (31) abcdw007のAPIパケットの特徴 -マニュアル風に書いたらきっとmanの方になるような内容だけど、どちらかというと面白おかしく書くので、memoに書くことにしました。 -アセンブラレベルでこそabcdw007の仕様のよさがはっきりするので、それを書きたいと思います。 -abcdw007以降の仕様では、APIを呼び出すには、ESIをアプリ起動時の値に戻して(変更していないのならそのままで) EDI = 0; CALL([ESI+20]); DB ... -とするのが一般的です。EDIをゼロにするとCALLの直後がパケット開始アドレスだと見なされて、パケットの実行が終わるとDBのあとのところへちゃんと戻ってきてくれます。EDIに適当なアドレスを入れた場合は、そこがパケット開始アドレスになります。旧OSASKのEBXみたいなものだと思えば分かりやすいでしょう(旧OSASKとは違い、EDIはパケット終端の次のアドレスまで進んでくれます・・・まだ未実装ですが)。 --なお上記の EDI = 0; はASKAでは XOR(EDI, EDI); という意味になります。もちろんMOVで0にしたければそれでもいいですが。 --なおアプリ起動時はEDI=0, EBP=[ESI+20]になっていますので、何も設定せずにCALL(EBP); DB ...だけでいけます。 -まあなにはともあれ、一つ例を出しましょう。 EDI = 0; CALL([ESI+20]); DB(0x40); -これは正常終了です。パケットの中身は、gh4でエンコードされているので[4 0]です。 --gh4については[[GUIGU01/man004]]を参照。 * こめんと欄 #comment
(This host) = http://osask.net