diff --git a/src/gui/Src/Tracer/TraceBrowser.cpp b/src/gui/Src/Tracer/TraceBrowser.cpp index e59f6c92..901d3757 100644 --- a/src/gui/Src/Tracer/TraceBrowser.cpp +++ b/src/gui/Src/Tracer/TraceBrowser.cpp @@ -956,14 +956,14 @@ void TraceBrowser::mousePressEvent(QMouseEvent* event) mHighlightingMode = false; reloadData(); } + if(event->modifiers() & Qt::ShiftModifier) + expandSelectionUpTo(index); + else + setSingleSelection(index); + mHistory.addVaToHistory(index); + emit selectionChanged(getInitialSelection()); } - if(event->modifiers() & Qt::ShiftModifier) - expandSelectionUpTo(index); - else - setSingleSelection(index); - mHistory.addVaToHistory(index); updateViewport(); - emit selectionChanged(getInitialSelection()); return; break; diff --git a/src/gui/Src/Tracer/TraceWidget.cpp b/src/gui/Src/Tracer/TraceWidget.cpp index addf7c3b..626f3566 100644 --- a/src/gui/Src/Tracer/TraceWidget.cpp +++ b/src/gui/Src/Tracer/TraceWidget.cpp @@ -244,9 +244,18 @@ void TraceWidget::updateInfobox(unsigned long long selection, TraceFileReader* t return static_cast(0); } }; + duint MemoryAddress[MAX_MEMORY_OPERANDS]; + duint MemoryOldContent[MAX_MEMORY_OPERANDS]; + duint MemoryNewContent[MAX_MEMORY_OPERANDS]; + bool MemoryIsValid[MAX_MEMORY_OPERANDS]; + int MemoryOperandsCount; + MemoryOperandsCount = traceFile->MemoryAccessCount(selection); + if(MemoryOperandsCount > 0) + traceFile->MemoryAccessInfo(selection, MemoryAddress, MemoryOldContent, MemoryNewContent, MemoryIsValid); if(zydis.Disassemble(registers.regcontext.cip, opcode, opsize)) { int opindex; + int memaccessindex; //Jumps if(zydis.IsBranchType(Zydis::BTCondJmp)) { @@ -278,6 +287,25 @@ void TraceWidget::updateInfobox(unsigned long long selection, TraceFileReader* t line += ":["; line += ToPtrString(value); line += "]"; + if(zydis[opindex].size <= sizeof(void*) * 8) + { + for(memaccessindex = 0; memaccessindex < MemoryOperandsCount; memaccessindex++) + { + if(MemoryAddress[memaccessindex] == value) + { + line += "="; + duint mask; + if(zydis[opindex].size < sizeof(void*) * 8) + mask = (1 << zydis[opindex].size) - 1; + else + mask = ~(duint)0; + line += ToHexString(MemoryOldContent[memaccessindex] & mask); + line += " -> "; + line += ToHexString(MemoryNewContent[memaccessindex] & mask); + break; + } + } + } mInfo->setCellContent(infoline, 0, line); infoline++; }