ページへ戻る

− Links

 印刷 

sero​/efg01解析 のバックアップの現在との差分(No.2) :: OSASK計画

osaskwiki:sero/efg01解析 のバックアップの現在との差分(No.2)

« Prev[4]  Next »[5]
2: 2010-02-03 (水) 20:53:04 sero[6] ソース[7] 現: 2024-01-08 (月) 12:59:02 lina[8] ソース[9]
Line 4: Line 4:
- よって、正確な情報であるという保障はありません - よって、正確な情報であるという保障はありません
- その点留意していただければ幸いです - その点留意していただければ幸いです
 +- 優先的に解析結果がほしい分野があればコメント欄へどうぞ 実力の及ぶ限り努力します
** 解析の前に [#af236b59] ** 解析の前に [#af236b59]
Line 19: Line 20:
+ efg01/asm_apiで、レジスタをスタックに積んでから、 + efg01/asm_apiで、レジスタをスタックに積んでから、
+ efg01/c_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
« Prev[4]  Next »[5]