サイトトップへ
OSASK.NET
  サイトトップへ       新掲示板(閉鎖済)   Wiki(凍結済)   旧掲示板(廃止済)   ニュース(廃止済)  
1: 2010-02-02 (火) 22:47:46 sero ソース 現: 2024-01-08 (月) 12:59:02 lina ソース
Line 1: Line 1:
* efg01解析 [#b357c99a] * efg01解析 [#b357c99a]
-- by [[sero]]+- (by [[sero]], 2010/2/2~)
- このページはSeroがefg01のソースを読んでわかったことをメモするページです - このページはSeroがefg01のソースを読んでわかったことをメモするページです
- よって、正確な情報であるという保障はありません - よって、正確な情報であるという保障はありません
- その点留意していただければ幸いです - その点留意していただければ幸いです
 +- 優先的に解析結果がほしい分野があればコメント欄へどうぞ 実力の及ぶ限り努力します
** 解析の前に [#af236b59] ** 解析の前に [#af236b59]
Line 10: Line 11:
** 概要 [#g19ba445] ** 概要 [#g19ba445]
-// - GUIGUI01アプリは+- GUIGUI01のAPIは複数の機能を一度に実行できる 
 +- そのため、実行するAPIの機能を順に並べたパケットをefg01に渡すことになっている 
 +- その形式は、[[GH4>GUIGUI01/man0004]]と呼ばれる 
 + 
 +** efg01に到達するまで [#s5534258] 
 ++ APIコール(z_tools/guigui01/g01libc0.lib/startup.askのg01_execcmd(0)) 
 ++ JMP [ESI] 
 ++ efg01/asm_apiで、レジスタをスタックに積んでから、 
 ++ efg01/c_api()がコールされる 
 + 
 +** 型名・構造体など [#dc5a88da] 
 +- UCHAR 
 +-- 実体はunsigned char型 
 +- READ_EH4 
 +-- 概要: (名前はEH4になっているが)GH4形式のパケットからデータを取り出すための構造体 FIFO構造を持つ 
 +--- UCHAR buf[READ_EH4_BUFLEN] : パケットのデータを一時的にキャッシュするバッファ 
 +--- int r : 次のデータがあるbuf上のインデックス 
 + 
 +** void c_api(int edi, int esi, int ebp, int esp, int ebx, int edx, int ecx, int eax, int eip) [#k101e498] 
 +- 概要: GUIGUI01のAPI処理本体(名称は「Cで書かれたAPI」に由来すると思われる) 行数: 797行 
 +- 引数: APIを呼び出したときのアプリのレジスタの値(これを変更すると、アプリのレジスタも書き換わる) 
 +- 主要なローカル変数 
 +-- struct READ_API ra : efg01に渡されるパケットから情報を取り出すための構造体 
 +-- int f3 = 1 : あといくつのAPI機能を実行するか(初期値は1、つまり、一つの機能を実行したら終了) 
 +- メインの処理 
 +    if (edi == 0) // EDIが0だったら 
 +     cmd = (UCHAR *) eip; // APIパケットの開始はEIPから 
 +    init_ra(&ra, cmd); // raを初期化し、パケット情報を受け取る準備をする 
 +    ra.reg32 = &edi; // レジスタを参照・書き換えするための準備 
 +    ra.st0 = &eip; // 詳細は不明(guigui01.h(つまりC言語からのアクセス)を使うだけならおそらく使われていない(要調査TODO)) 
 +    for (;;) { 
 +     if (f3 == 0) // 実行する機能の残りが0ならば 
 +     goto fin; // API処理終了 
 +     f3--; // 今からひとつ処理する 
 +     i = getnum_api(&ra, 0); // パケットからひとつデータを取り出す 
 +     if (i == 0) 
 +     continue; // API番号0はパディングのためスキップされる 
 +     if (i == 3) { // パケットの終端、またはパケットの延長 
 +     中略 
 +     return; 
 +     } 
 +     if (i == 4) { // アプリの終了 
 +     中略 
 +     exit(1); 
 +     } 
 +     if (i == 5) { // 文字列表示 
 +     中略 
 +     } else if (i == 6) { // コマンドラインオプションの処理 
 +     中略 
 +     } else if (i == 0x00ffffff) { // ジャンクAPI(仕様が決定版でないAPI)の処理 
 +     中略 
 +     } else { 
 +     printf("c_api: error i=%d\n", i); 
 +     exit(1); 
 +     } 
 +    } 
 + 
 +*** コマンドラインオプションの処理 [#j57d1ec7] 
 +- 概要: (GUIGUI01アプリに渡された(実際はefg01が受け取っている))コマンドラインオプションの形式を定義し、その値をアプリに引き渡す 行数: 287行 
 +- 関連するグローバル変数 
 +-- FUNC06STR *func06str : コマンドラインオプションの定義を保管する構造体 ポインタになっているが、アプリ実行開始時にはすでに動的確保済み 
 + 
 +** コメント欄 [#pfe3f553] 
 +#comment

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

目次
メンバー一覧


最新の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コミュニティによって管理・運営されています。