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); } }