Что делает функция CallerAddr DUnit2 и как преобразовать ее в 64-битную?

Я пытаюсь заставить DUnit2 работать под 64-битной системой, но я не понимаю, что делает этот метод, не говоря уже о том, как преобразовать его в 64-битную версию. Чистый Паскаль был бы лучше, но поскольку он ссылается на стек (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;
7
задан Rob Kennedy 20 August 2012 в 15:54
поделиться