这里,在这个函数中,序言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
答案 0 :(得分:4)
Bo是正确的,它是分配堆栈 - 您可以看到堆栈位置在接下来的两条指令中被清零,因此实际上并未使用ecx值。您经常在MSVC编译的文件中看到这种模式。
答案 1 :(得分:2)
它正在获得堆栈空间。
sub esp,8 - > 3字节。
push ecx X 2 - > 2字节。