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);
}
}(This host) = http://osask.net