如何获取重载的函数/过程/方法的所有地址位置?
例如,Dialogs.MessageDlgPosHelp有两个不同版本的重载 - 一个没有默认按钮,另一个没有.我如何获得这两个函数的地址位置?
我试图让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) 有谁知道远程调试符号文件的文件格式(项目 - >选项 - >链接 - >包括远程调试符号)?
在阅读 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)