サイトトップへ
OSASK.NET
  サイトトップへ       新掲示板(閉鎖済)   Wiki(凍結済)   旧掲示板(廃止済)   ニュース(廃止済)  
5: 2008-12-23 (火) 23:01:36 ソース 6: 2008-12-23 (火) 23:01:36 ソース
Line 46: Line 46:
-こんなものです。パケットは[5 0 1 EAX]になります。同じように応用すればhelloももちろん作れます。 -こんなものです。パケットは[5 0 1 EAX]になります。同じように応用すればhelloももちろん作れます。
-しかしこのままでは終了ファンクションと同じで大して面白くありません。面白いのはここからです。!5の後に、!6_504_0_!5_1_3_0...と続けることができます。つまりこういうことです。 -しかしこのままでは終了ファンクションと同じで大して面白くありません。面白いのはここからです。!5の後に、!6_504_0_!5_1_3_0...と続けることができます。つまりこういうことです。
- EDI = 0; CALL([ESI]); DB(0x50, 0x56, 0xdf, 0x80, 0x51, 0x30, 0x32, 0x34, 0x36, 0x30); + EDI = 0; CALL([ESI]); DB(0x50, 0x56, 0xde, 0x80, 0x51, 0x30, 0x32, 0x34, 0x36, 0x30); 
--これは[5 0 !6 504 0 1 3 0 "246"][3]という意味になります(余計な!5は消しました)。!6_504_0_1_3というのが特別なもので、!6_504_0は「モード変更直接」、次の1が8bit配列モード、次の3が「文字数兼モード長」です。8bit配列モードになれば、数値をいちいちgh4でエンコードしなくていいのです。普通にcharで書けます。ちなみに文字数3の後の0は、ただのパディングですが、これは必ず0でなければいけません。適当な数値を入れると誤動作します。 +-これは[5 0 !6 488 0 1 3 0 "246"][3]という意味になります(余計な!5は消しました)。!6_488_0_1_3というのが特別なもので、!6_488_0は「モード変更直接」、次の1が8bit配列モード、次の3が「文字数兼モード長」です。8bit配列モードになれば、数値をいちいちgh4でエンコードしなくていいのです。普通にcharで書けます。ちなみに文字数3の後の0は、ただのパディングですが、これは必ず0でなければいけません。適当な数値を入れると誤動作します。 
--しかし実は、機能番号5のフォーマットは、[5 slot (!6 504) mod (1) len str]となっています(mod=0の場合)。この()で囲まれた部分は、!5で打ち消さなければ自動で挿入される部分です。つまり自動挿入をあてにするなら、+-しかし実は、機能番号5のフォーマットは、[5 slot (!6 488) mod (1) len str]となっています(mod=0の場合)。この()で囲まれた部分は、!5で打ち消さなければ自動で挿入される部分です。つまり自動挿入をあてにするなら、
 EDI = 0; CALL([ESI]); DB(0x50, 0x03, 0x32, 0x34, 0x36, 0x30);  EDI = 0; CALL([ESI]); DB(0x50, 0x03, 0x32, 0x34, 0x36, 0x30);
-これで十分なのです。 -これで十分なのです。
-また文字列といえば、C言語で見られるような、'\0'で終わるタイプもあります。つまり事前に文字数が分からないけど、ターミネータがあるからたどっていけば終端は分かる、というやつです。そういうのは、mod=1を使うと簡単に扱えます。 -また文字列といえば、C言語で見られるような、'\0'で終わるタイプもあります。つまり事前に文字数が分からないけど、ターミネータがあるからたどっていけば終端は分かる、というやつです。そういうのは、mod=1を使うと簡単に扱えます。
--mod=1のときの機能番号5のフォーマットは、[5 slot (!6 504) mod (1) (term) str]になります。ここでtermはデフォルトでは自動挿入ですが、自動挿入任せにすると0が入ります。まさに'\0'がターミネータですね。+-mod=1のときの機能番号5のフォーマットは、[5 slot (!6 488) mod (1) (term) str]になります。ここでtermはデフォルトでは自動挿入ですが、自動挿入任せにすると0が入ります。まさに'\0'がターミネータですね。
 EDI = 0; CALL([ESI]); DB(0x50, 0x10, 0x32, 0x34, 0x36, 0x00, 0x30);  EDI = 0; CALL([ESI]); DB(0x50, 0x10, 0x32, 0x34, 0x36, 0x00, 0x30);
-まだあります。mod=2/3にすると、strの部分が (!6 0) r に化けます(それ以外はmod=0/1と同じ)。これはどういうことかというと、パケットの中に文字列をおかずに、レジスタで指定したところに文字列を置けるのです。これが「モード変更間接」です。 -まだあります。mod=2/3にすると、strの部分が (!6 0) r に化けます(それ以外はmod=0/1と同じ)。これはどういうことかというと、パケットの中に文字列をおかずに、レジスタで指定したところに文字列を置けるのです。これが「モード変更間接」です。
--なんかもう疲れてきたので説明は適当になってきていますが(すみません)、このような(!6 504)の自動挿入は文字列を指定するような場所にはすべて設定されていて、たとえばfopenでファイル名指定するときなんかも、パケットの中にファイル名を埋め込むもよし、ポインタで指定するもよしの、何でもござれです。+-なんかもう疲れてきたので説明は適当になってきていますが(すみません)、このような(!6 488)の自動挿入は文字列を指定するような場所にはすべて設定されていて、たとえばfopenでファイル名指定するときなんかも、パケットの中にファイル名を埋め込むもよし、ポインタで指定するもよしの、何でもござれです。
* こめんと欄 * こめんと欄

トップ   差分 バックアップ 複製 名前変更 リロード印刷に適した表示   ページ新規作成 全ページ一覧 単語検索 最新ページの一覧   ヘルプ
新着

目次
メンバー一覧


最新の20件
2016-10-01 2016-09-08
  • @MenuBar.
2016-09-07 2016-09-04 2016-08-15 2015-09-23 2014-07-30 2014-07-04 2014-02-04 2013-10-26 2013-06-21 2013-06-17 2013-06-15 2013-04-02 2013-02-09 2013-02-04 2012-12-25 2012-12-01 2012-05-28 2012-03-31

トピック一覧
一般用コメント最新
新掲示板lina
2016/9/5 20:58
SandBoxゲスト
2016/9/4 12:01
RecentDeletedlina
2015/6/2 19:29
Old-OSASK-MLlina
2014/6/29 9:14
hideyosi/メールhideyosi
2014/1/6 20:17
hideyosi/募集中lina
2013/11/8 19:56

このサイトは川合秀実から委託を受けて、OSASKコミュニティによって管理・運営されています。