mirror of
https://github.com/beefytech/Beef.git
synced 2025-06-09 03:52:19 +02:00
Improved Win32 debugging
This commit is contained in:
parent
cbae124dd5
commit
ad9075d1aa
11 changed files with 86 additions and 39 deletions
|
@ -6113,9 +6113,19 @@ addr_target COFF::EvaluateLocation(DbgSubprogram* dwSubprogram, const uint8* loc
|
|||
else
|
||||
result = stackFrame->mRegisters.mIntRegsArray[X64Reg_RBP] + defRangeFPRel.offFramePointer;
|
||||
#else
|
||||
if (dwSubprogram->mLocalBaseReg == DbgSubprogram::LocalBaseRegKind_ESP)
|
||||
//result = stackFrame->mRegisters.mIntRegsArray[X86Reg_ESP] + BF_ALIGN(dwSubprogram->mFrameBaseLen, 16) + defRangeFPRel.offFramePointer;
|
||||
result = stackFrame->mRegisters.mIntRegsArray[X86Reg_ESP] + dwSubprogram->mFrameBaseLen + defRangeFPRel.offFramePointer;
|
||||
if (dwSubprogram->mLocalBaseReg == DbgSubprogram::LocalBaseRegKind_VFRAME)
|
||||
{
|
||||
if (defRangeFPRel.offFramePointer > 0)
|
||||
{
|
||||
// Note that a positive offFramePointer always refers to params, and param fp reg is always EBP-relative.
|
||||
// If this is not true in some cases then we need to actually pass in knowledge of whether is loc data is
|
||||
// from a param or not, and we have to store the param fp reg just like the local fp reg (mLocalBaseReg)
|
||||
result = stackFrame->mRegisters.mIntRegsArray[X86Reg_EBP] + defRangeFPRel.offFramePointer;
|
||||
}
|
||||
else
|
||||
//result = stackFrame->mRegisters.mIntRegsArray[X86Reg_EBP] + defRangeFPRel.offFramePointer - 4;
|
||||
result = ((stackFrame->mRegisters.mIntRegsArray[X86Reg_ESP] + dwSubprogram->mFrameBaseLen) & ~7) + defRangeFPRel.offFramePointer;
|
||||
}
|
||||
else if (dwSubprogram->mLocalBaseReg == DbgSubprogram::LocalBaseRegKind_EBX)
|
||||
result = stackFrame->mRegisters.mIntRegsArray[X86Reg_EBX] + defRangeFPRel.offFramePointer;
|
||||
else
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue