64 bit assembler > UASM Assembler Development

Procedures without LOCAL's don't restore ESP from EBP

(1/1)

2B||!2B:
If a procedure has no LOCAL, it will not restore the stack from EBP.

Example of procedure with LOCAL


--- Code: ---TESTPROC proc
LOCAL Dummy:DWORD

XOR EAX,EAX
ret

TESTPROC endp

--- End code ---


--- Code: ---PUSH EBP
MOV EBP,ESP
ADD ESP,-4
XOR EAX,EAX
MOV ESP,EBP
POP EBP
RETN 4

--- End code ---

Removing LOCAL Dummy:DWORD would also make the procedure uses no MOV ESP,EBP before RET.


--- Code: ---PUSH EBP
MOV EBP,ESP
XOR EAX,EAX
POP EBP
RETN 4

--- End code ---

Is this the expected behavior or this is a bug?



jj2007:
Expected behaviour. Masm and Watcom assemblers may differ slightly, e.g. using a leave before returning.

2B||!2B:
I didn't know this until recently. I have used few PUSH's without re-balancing the stack and it was working with UASM v2.48 if I remember correctly. Must've been added recently...

jj2007:

--- Quote from: 2B||!2B on August 17, 2021, 06:36:47 AM ---I didn't know this until recently. I have used few PUSH's without re-balancing the stack and it was working with UASM v2.48 if I remember correctly. Must've been added recently...

--- End quote ---

Check your non-volatile registers (esi edi ebx) saved via uses :cool:

Navigation

[0] Message Index

Go to full version