testhaveexception.dpr

来自「delphi开发语言下的源代码分析」· DPR 代码 · 共 61 行

DPR
61
字号
program TestHaveException;

{$APPTYPE CONSOLE}

uses
  SysUtils;

function HaveException : boolean;
const
  {$WRITEABLECONST ON}
  IsFinally : LongInt =  0;

  procedure GetFinallyReturnAddr;
  begin
    try
      try
        asm xor eax, eax; idiv eax end;
      finally
        asm pop [IsFinally]; push [IsFinally] end;
      end;
    except
    end;
  end;

asm
  CMP   IsFinally, 0
  JNE   @@CHECK
  CALL  GetFinallyReturnAddr

@@CHECK:
  MOV   EAX, [ESP + 4]
  CMP   IsFinally, EAX
  JE    @@DONE
  MOV   EAX, 0
@@DONE:
end;

function HaveException_beta : boolean;
asm
end;

var
  i : integer;
begin
  try
    i := 3;
    i := 5 div i;
  finally
    Writeln(BoolToStr(HaveException, True));
  end;

  try
    i := 0;
    i := 5 div i;
  finally
    Writeln(BoolToStr(HaveException, True));
  end;

end.

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?