ページへ戻る

− Links

 印刷 

GUIGUI01​/memo16 のバックアップ差分(No.1) :: OSASK計画

osaskwiki:GUIGUI01/memo16 のバックアップ差分(No.1)

  Next »[4]
1: 2008-12-23 (火) 21:40:20 ソース[5]
Line 1: Line 1:
 +* ぐいぐい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
  Next »[4]