ESP 的值未正确保存

Value of ESP was not properly saved

MASM 代码:

.model flat, stdcall
option prologue:none
option epilogue:none
.code
lockc proc value : dword
mov ecx, [esp+04h]
_loop:
lock bts [ecx], 0
pause
jc _loop
ret
lockc endp
end

C代码:

typedef struct { DWORD l; }lck_t;
extern DWORD __stdcall lockc(lck_t* l);

忽略可能发生的任何错别字,我是手抄的。代码编译正常,但我一直收到 ESP 错误。

我从 2 个线程调用该函数,它总是在第一次执行后向我显示错误,但我不明白为什么会这样。

这个函数使用了stdcall调用约定,接受一个参数,但是没有释放space参数占用的空间,所以returns之后栈会不平衡(调用者不会调整堆栈来摆脱参数,因为调用一个 stcall 函数不是必需的)。

ret 更改为 ret 4