为什么ecx被推到堆栈两次,只是一个接一个?

时间:2012-11-16 08:17:31

标签: assembly

这里,在这个函数中,序言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

2 个答案:

答案 0 :(得分:4)

Bo是正确的,它是分配堆栈 - 您可以看到堆栈位置在接下来的两条指令中被清零,因此实际上并未使用ecx值。您经常在MSVC编译的文件中看到这种模式。

答案 1 :(得分:2)

它正在获得堆栈空间。

sub esp,8 - > 3字节。

push ecx X 2 - > 2字节。