I could not find any official place where ReturnAddress is documented even though it is used at quite a few places in the RTL, VCL, FMX and 3rd party libraries like DUnitX, Spring4D, JCL, ReportBuilder, TeeChart.
I tried searching it in the contexts of Delphi 2007, Delphi 2009, but there is only a [Archive.is] different System.ObjAuto.TParameters.ReturnAddress documented in XE2 and higher.
procedure Abort;
begin
raise EAbort.CreateRes(@SOperationAborted) at ReturnAddress;
end;
There is a (usually broken*) ReturnAddr function used in various places of the RTL/VCL/FMX and (therefore wrongfully copied) in many other peoples code.
function ReturnAddr: Pointer;
// From classes.pas
asm
MOV EAX,[EBP+4] // sysutils.pas says [EBP-4], but this works !
end;
- See the above link; I think this was fixed in Delphi XE, but the issue is still open.
Related to the above is the documented ExceptAddr.
I’ve used this in my ExceptionHelperUnit to build a GetStackTrace function in the example gist below.
I found these posts documenting the behaviour of the above intrinsic functions and more:
–jeroen
Read the rest of this entry »