ページへ戻る

− Links

 印刷 

GUIGUI01​/memo16 のバックアップソース(No.1) :: OSASK計画

osaskwiki:GUIGUI01/memo16 のバックアップソース(No.1)

  Next »[4]
* ぐいぐい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]