* efg01解析 [#b357c99a] - (by [[sero]], 2010/2/2~) - このページはSeroがefg01のソースを読んでわかったことをメモするページです - よって、正確な情報であるという保障はありません - その点留意していただければ幸いです ** 解析の前に [#af236b59] - ここでは、OSASK.NETトップから[各種過去ログ集メニュー]→[2009.11.01時点でのトップページ]→[おもな成果物/[[OSASK-HB系:http://old.osask.jp/osaskhb.html]]]からダウンロードできるabcdw017を対象とします - また、当面の間はAPIコールを中心に解析します ** 概要 [#g19ba445] - 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()がコールされる ** void c_api(int edi, int esi, int ebp, int esp, int ebx, int edx, int ecx, int eax, int eip) [#k101e498] - 引数: APIを呼び出したときのアプリのレジスタの値(これを変更すると、アプリのレジスタも書き換わる) - 主要なローカル変数 -- struct READ_API ra : efg01に渡されるパケットから情報を取り出すための構造体 -- int f3 = 1 : あといくつのAPI機能を実行するか(初期値は1、つまり、一つの機能を実行したら終了) - メインの処理 if (edi == 0) cmd = (UCHAR *) eip; init_ra(&ra, cmd); ra.reg32 = &edi; ra.st0 = &eip; for (;;) { 中略 }
(This host) = http://osask.net