Delphi-Quellcode:
function EBP: Cardinal;
asm mov eax, ebp
end;
// {$O-}
function ShowThat(
const Param: Integer): Boolean;
begin
PInteger(@Param)^ := 9;
if Cardinal(@Param) <= EBP
then // Stack wird von der größeren zur kleineren Adresse hin aufgebaut
ShowMessage('
Param liegt im Stackframe von ShowThat');
end;
procedure TForm1.Button1Click(Sender: TObject);
var
V: Integer;
begin
V := SpinEdit1.Value;
ShowThat(V);
ShowMessage(IntToStr(V));
end;
Da kommt bei mir für SpinEdit1.Value=1 in der MessageBox ein "1" heraus.
Das kann man auch noch anders Beweisen, indem man @Param mit dem EBP-Register vergleicht. Ist @Param kleiner gleich EBP, dann liegt @Param im Stackframe von ShowThat und nicht im Stackframe von Button1Click.