小编Nic*_*ing的帖子

获取重载方法的地址位置

如何获取重载的函数/过程/方法的所有地址位置?

例如,Dialogs.MessageDlgPosHelp有两个不同版本的重载 - 一个没有默认按钮,另一个没有.我如何获得这两个函数的地址位置?

delphi overload-resolution object-address

8
推荐指数
1
解决办法
715
查看次数

DUnit2的CallerAddr函数有什么作用,如何将其转换为64位?

我试图让DUnit2在64位下工作,但我很难接受这个方法的功能,更不用说如何将它转换为64位.Pure 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;
Run Code Online (Sandbox Code Playgroud)

delphi assembly 32bit-64bit

7
推荐指数
1
解决办法
496
查看次数

远程调试符号文件格式

有谁知道远程调试符号文件的文件格式(项目 - >选项 - >链接 - >包括远程调试符号)?

delphi file-format remote-debugging debug-symbols

5
推荐指数
0
解决办法
221
查看次数

Win64 异常堆栈遍历不显示条目

在阅读 Win64 结构化异常跟踪(来自针对 x64 异常处理支持的编程,第 7 部分:将它们放在一起,或构建堆栈遍历例程)时,我转换了代码StackWalk64.cpp

procedure DumpExceptionStack();
var
  LContext : CONTEXT;
  LUnwindHistoryTable : _UNWIND_HISTORY_TABLE;
  LRuntimeFunction : Pointer;
  LImageBase : ULONGLONG;
    HandlerData : Pointer;
    EstablisherFrame : ULONG64;
    NvContext : KNONVOLATILE_CONTEXT_POINTERS;

  LLineNumber                    : integer;
  LModuleName                    : UnicodeString;
  LPublicAddr                    : pointer;
  LPublicName                    : UnicodeString;
  LUnitName                      : UnicodeString;
begin
    //
    // First, we'll get the caller's context.
    //
  RtlCaptureContext(LContext);

    //
    // Initialize the (optional) unwind history table.
    //
  LUnwindHistoryTable := Default(_UNWIND_HISTORY_TABLE);

  // LUnwindHistoryTable.Unwind := True;

    //
    // This …
Run Code Online (Sandbox Code Playgroud)

windows delphi winapi

5
推荐指数
1
解决办法
524
查看次数