diff --git a/src/dbg/btparser b/src/dbg/btparser index c8ca8305..46b59b43 160000 --- a/src/dbg/btparser +++ b/src/dbg/btparser @@ -1 +1 @@ -Subproject commit c8ca8305e29d21f10ead878609048aca0b10e59c +Subproject commit 46b59b43ceb0209d7ab46d7f69bd16003b40b5a9 diff --git a/src/gui/Src/Gui/CPUArgumentWidget.cpp b/src/gui/Src/Gui/CPUArgumentWidget.cpp index 59791b2b..ba1dd24f 100644 --- a/src/gui/Src/Gui/CPUArgumentWidget.cpp +++ b/src/gui/Src/Gui/CPUArgumentWidget.cpp @@ -51,7 +51,7 @@ void CPUArgumentWidget::disassembledAtSlot(dsint, dsint cip, bool, dsint) DbgDisasmFastAt(cip, &disasm); const auto & cur = mCallingConventions[mCurrentCallingConvention]; - mStackOffset = disasm.call ? 0 : cur.getCallOffset(); + mStackOffset = cur.getStackOffset() + (disasm.call ? 0 : cur.getCallOffset()); if(ui->checkBoxLock->checkState() == Qt::PartiallyChecked) //Calls { mAllowUpdate = disasm.call; diff --git a/src/gui/Src/Gui/CPUArgumentWidget.h b/src/gui/Src/Gui/CPUArgumentWidget.h index a1096e8d..cdac71d8 100644 --- a/src/gui/Src/Gui/CPUArgumentWidget.h +++ b/src/gui/Src/Gui/CPUArgumentWidget.h @@ -87,9 +87,11 @@ private: QString name; int stackArgCount; QString stackLocation32; + duint stackOffset32; duint callOffset32; QString stackLocation64; duint callOffset64; + duint stackOffset64; std::vector arguments; const QString & getStackLocation() const @@ -97,6 +99,11 @@ private: return ArchValue(stackLocation32, stackLocation64); } + const duint getStackOffset() const + { + return ArchValue(stackOffset32, stackOffset64); + } + const duint & getCallOffset() const { return ArchValue(callOffset32, callOffset64); @@ -107,12 +114,21 @@ private: arguments.push_back(argument); } - explicit CallingConvention(const QString & name, int stackArgCount = 0, const QString & stackLocation32 = "esp", duint callOffset32 = sizeof(duint), const QString & stackLocation64 = "rsp", duint callOffset64 = sizeof(duint) * 5) + explicit CallingConvention(const QString & name, + int stackArgCount = 0, + const QString & stackLocation32 = "esp", + duint stackOffset32 = 0, + duint callOffset32 = sizeof(duint), + const QString & stackLocation64 = "rsp", + duint stackOffset64 = 0x20, + duint callOffset64 = sizeof(duint)) : name(name), stackArgCount(stackArgCount), stackLocation32(stackLocation32), + stackOffset32(stackOffset32), callOffset32(callOffset32), stackLocation64(stackLocation64), + stackOffset64(stackOffset64), callOffset64(callOffset64) { }