1

在这里,在这个函数序言中,ecx被一次又一次地压入堆栈,为什么?

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 是对的,它是分配堆栈 - 您可以看到堆栈位置在接下来的两条指令中被清零,因此实际上没有使用 ecx 值。您经常在 MSVC 编译的文件中看到这种模式。

于 2012-11-19T12:55:08.697 回答
2

它只是获得堆栈空间。

子 esp,8 -> 3 字节。

推送 ecx X 2 -> 2bytes。

于 2012-11-22T05:55:46.080 回答