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 + -
显示快捷键?