このへんとか見る限り、callの前にpushしたものは引数と見ていいだろうが、どこのpushがそうなのやら。
呼び出し側と呼び出され側を突き合わせて推測するのだろうが。
ともあれ呼出規約@Wikipediaを参考に、近そうなやつはどれかあたりをつけよう。
callしたあと、ガシガシjumpしたり次の処理をやっていて、「add esp, 12 ;スタック上の引数を除去」の形跡がないから、Pascal系の規約を想定したほうが賢いだろう。まあ、0個の引数の可能性やfastcallも否定できないが。
x86(IA-32) アーカイブ
とかかなぁ。
caller
frag: 0040217B callers = [00402146;;]
lea ebx, dword[ebp+FFFFFECC]
push ebx
lea ebx, dword[ebp+FFFFFED0]
push ebx
lea ebx, dword[ebp+FFFFFF2C]
push ebx
lea ebx, dword[ebp+FFFFFE68]
push ebx
lea ebx, dword[ebp+FFFFFEFC]
push ebx
lea ebx, dword[ebp+FFFFFF74]
mov dword[ebx], esi
push ebx
lea ebx, dword[ebp+FFFFFCE8]
push ebx
lea ebx, dword[ebp+FFFFFF74]
mov dword[ebx], esi
push ebx
lea ebx, dword[ebp+FFFFFD5C]
push ebx
call 0040133C
callee
proc: 0040133C callers = [00401DD8;00401EE6;004021BE;0040232A;00402AAF;00402BD8;00402D01;;00402E2A;004030B7;004031E0;00403309;0040357B;
004036A4;004038FB;;]
frag: 0040133C callers = []
push ebp
mov ebp, esp
push ebx
push esi
push edi
sub esp, 05C
xor esi, esi
push esi
push esi
push esi
push esi
push esi
push esi
xor eax, eax
mov ebx, dword[ebp+1C]
movsx ecx, word[ebx]
mov ebx, dword[ebp+08]
sub ecx, dword[ebx+18]
shl ecx, 1
add ecx, dword[ebx]
movsx ecx, word[ecx]
cmp ecx, eax
jne 00401377
mov ebx, dword[ebp+28]
mov word[ebx], 0000
jmp 0040150E
0 件のコメント:
コメントを投稿