1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- {$MODE objfpc}
- {$H+}
- program stackcrash;
- uses
- {$ifdef go32v2}
- dpmiexcp,
- {$endif go32v2}
- sysutils;
- type
- TMyClass = class
- public
- procedure Proc1;
- procedure Proc2;
- end;
- procedure TMyClass.Proc1;
- var
- x, y: Integer;
- begin
- try
- exit;
- except
- on e: Exception do begin e.Message := '[Proc1]' + e.Message; raise e end;
- end;
- end;
- procedure TMyClass.Proc2;
- var
- x: array[0..7] of Byte;
- crash: Boolean;
- begin
- crash := True; // <--- ! This corrupts the stack?!?
- raise Exception.Create('I will crash now...');
- end;
- var
- obj: TMyClass;
- begin
- obj := TMyClass.Create;
- obj.Proc1;
- WriteLn('Proc1 done, calling Proc2...');
- obj.Proc2;
- WriteLn('Proc2 done');
- end.
|