我试图让 DUnit2 在 64 位下工作,但我对这种方法的作用感到困惑,更不用说如何将其转换为 64 位了。纯 Pascal 会更好,但由于它指的是堆栈 (ebp),所以它可能是不可能的。
function CallerAddr: Pointer; assembler;
const
CallerIP = $4;
asm
mov eax, ebp
call IsBadPointer
test eax,eax
jne @@Error
mov eax, [ebp].CallerIP
sub eax, 5 // 5 bytes for call
push eax
call IsBadPointer
test eax,eax
pop eax
je @@Finish
@@Error:
xor eax, eax
@@Finish:
end;