Fehler mit Declare
Verfasst: 10.09.2011 04:38
Fuehrt man folgenden Code aus, schmiert das Programm, beim Verlassen von A(), ab.
Schaut man sich den ASM Code an, sieht man das da irgendwas nicht so stimmen kann.
Der Stack sollte doch nach dem aufrufen einer CDECL Funktionen wieder in den Ursprungszustand
gebracht werden.
Im ASM Code steht dann aber sowas :
Von "add esp,4" keine Spur. Der Stack ist verschoben und das Programm schmiert ab. Den Fehler scheint
es aber nur zu geben, wenn man Declare (kann es sein das ich nen "DeclareC" uebersehen habe?)
verwendet und die Funktion tatsaechlich erst nach dem Aufrufen definiert wurde.
Getestet hab ich mit der aktuellen Version 4.51 und 4.60 RC1 (32bit)
Code: Alles auswählen
Declare B(a)
ProcedureC A(a,b,c)
B(a)
EndProcedure
ProcedureC B(a)
EndProcedure
A(a,b,c)
B(a)
Der Stack sollte doch nach dem aufrufen einer CDECL Funktionen wieder in den Ursprungszustand
gebracht werden.
Code: Alles auswählen
push a
call B
add esp,4
Code: Alles auswählen
; ProcedureC A(a,b,c)
macro MP2{
_Procedure2:
PS2=4
; B(a)
PUSH dword [esp+PS2+0]
CALL _Procedure0
; EndProcedure
XOR eax,eax
_EndProcedure3:
RET
}
es aber nur zu geben, wenn man Declare (kann es sein das ich nen "DeclareC" uebersehen habe?)
verwendet und die Funktion tatsaechlich erst nach dem Aufrufen definiert wurde.
Getestet hab ich mit der aktuellen Version 4.51 und 4.60 RC1 (32bit)