1

ここで、この関数のプロローグでは、ecx が 2 回ずつスタックにプッシュされますが、なぜ??

push    ebp
mov     ebp, esp

push    ecx
push    ecx
and     [ebp+var_8], 0
and     [ebp+var_4], 0
push    ebx
mov     ebx, [ebp+arg_0]
push    esi
push    edi
or      edi, 0FFFFFFFFh
push    edi             ; size_t
lea     eax, [ebp+var_8]
push    eax             ; int
mov     eax, [ebp+arg_4]
call    sub_671FF38E
push    2Eh             ; wchar_t
lea     esi, [ebp+var_8]
call    sub_673AFD82
cmp     eax, edi
jz      loc_677E564B
4

2 に答える 2

4

Bo の言うとおりです。スタックを割り当てるためです。次の 2 つの命令でスタックの場所がゼロに設定されていることがわかります。したがって、ecx 値は実際には使用されません。このパターンは、MSVC でコンパイルされたファイルでよく見られます。

于 2012-11-19T12:55:08.697 に答える
2

スタックスペースを取得しているだけです。

サブ esp、8 -> 3 バイト。

ecx X 2 をプッシュ -> 2 バイト。

于 2012-11-22T05:55:46.080 に答える