1
0
Fork 0

temporary

This commit is contained in:
torusrxxx 2023-07-17 15:45:23 +08:00
parent fc25d8ac8d
commit 37e4416dd2
13 changed files with 1896 additions and 94 deletions

View File

@ -11,7 +11,7 @@ static int dwordStringMaxLength(HexDump::DwordViewMode mode);
static int qwordStringMaxLength(HexDump::QwordViewMode mode);
static int twordStringMaxLength(HexDump::TwordViewMode mode);
HexDump::HexDump(QWidget* parent)
HexDump::HexDump(QWidget* parent, MemoryPage* memPage)
: AbstractTableView(parent)
{
memset(&mSelection, 0, sizeof(SelectionData));
@ -22,7 +22,10 @@ HexDump::HexDump(QWidget* parent)
setRowCount(0);
mMemPage = new MemoryPage(0, 0);
if(!memPage)
mMemPage = new MemoryPage(0, 0, this);
else
mMemPage = memPage;
mForceColumn = -1;
clearDescriptors();

View File

@ -79,7 +79,7 @@ public:
std::function<void()> columnSwitch;
};
explicit HexDump(QWidget* parent = 0);
explicit HexDump(QWidget* parent = 0, MemoryPage* memPage = 0);
~HexDump() override;
// Configuration

View File

@ -9,15 +9,15 @@ class MemoryPage : public QObject
public:
explicit MemoryPage(duint parBase, duint parSize, QObject* parent = 0);
bool read(void* parDest, dsint parRVA, duint parSize) const;
bool write(const void* parDest, dsint parRVA, duint parSize);
virtual bool read(void* parDest, dsint parRVA, duint parSize) const;
virtual bool write(const void* parDest, dsint parRVA, duint parSize);
duint getSize() const;
duint getBase() const;
duint va(dsint rva) const;
void setAttributes(duint base, duint size);
bool inRange(duint va) const;
private:
protected:
duint mBase;
duint mSize;
};

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,128 @@
#pragma once
#include "HexDump.h"
#include "TraceFileDump.h"
//forward declaration
//class CPUMultiDump;
class TraceBrowser;
class GotoDialog;
class CommonActions;
class TraceDump : public HexDump
{
Q_OBJECT
public:
explicit TraceDump(TraceBrowser* disas, TraceFileDumpMemoryPage* memoryPage, QWidget* parent);
void getColumnRichText(int col, dsint rva, RichTextPainter::List & richText) override;
QString paintContent(QPainter* painter, dsint rowBase, int rowOffset, int col, int x, int y, int w, int h);
void setupContextMenu();
void getAttention();
void contextMenuEvent(QContextMenuEvent* event);
void mouseDoubleClickEvent(QMouseEvent* event);
void mouseMoveEvent(QMouseEvent* event);
signals:
void displayReferencesWidget();
void showDisassemblyTab(duint selectionStart, duint selectionEnd, duint firstAddress);
public slots:
void modifyValueSlot();
void gotoExpressionSlot();
void gotoFileOffsetSlot();
void gotoStartSlot();
void gotoEndSlot();
void gotoPreviousReferenceSlot();
void gotoNextReferenceSlot();
void hexAsciiSlot();
void hexUnicodeSlot();
void hexCodepageSlot();
void hexLastCodepageSlot();
void textAsciiSlot();
void textUnicodeSlot();
void textCodepageSlot();
void textLastCodepageSlot();
void integerSignedByteSlot();
void integerSignedShortSlot();
void integerSignedLongSlot();
void integerSignedLongLongSlot();
void integerUnsignedByteSlot();
void integerUnsignedShortSlot();
void integerUnsignedLongSlot();
void integerUnsignedLongLongSlot();
void integerHexShortSlot();
void integerHexLongSlot();
void integerHexLongLongSlot();
void floatFloatSlot();
void floatDoubleSlot();
void floatLongDoubleSlot();
void addressUnicodeSlot();
void addressAsciiSlot();
void disassemblySlot();
void selectionGet(SELECTIONDATA* selection);
void selectionSet(const SELECTIONDATA* selection);
void binaryEditSlot();
void binaryCopySlot();
void binarySaveToFileSlot();
void findPattern();
void copyFileOffsetSlot();
void undoSelectionSlot();
void findReferencesSlot();
void selectionUpdatedSlot();
void syncWithExpressionSlot();
void allocMemorySlot();
void headerButtonReleasedSlot(int colIndex);
private:
TraceFileDumpMemoryPage* mMemoryPage;
MenuBuilder* mMenuBuilder;
CommonActions* mCommonActions;
//QMenu* mPluginMenu;
//QMenu* mFollowInDumpMenu;
QList<QAction*> mFollowInDumpActions;
GotoDialog* mGoto = nullptr;
GotoDialog* mGotoOffset = nullptr;
TraceBrowser* mDisas;
//CPUMultiDump* mMultiDump;
int mAsciiSeparator = 0;
enum ViewEnum_t
{
ViewHexAscii = 0,
ViewHexUnicode,
ViewTextAscii,
ViewTextUnicode,
ViewIntegerSignedShort,
ViewIntegerSignedLong,
ViewIntegerSignedLongLong,
ViewIntegerUnsignedShort,
ViewIntegerUnsignedLong,
ViewIntegerUnsignedLongLong,
ViewIntegerHexShort,
ViewIntegerHexLong,
ViewIntegerHexLongLong,
ViewFloatFloat,
ViewFloatDouble,
ViewFloatLongDouble,
ViewAddress,
ViewIntegerSignedByte,
ViewIntegerUnsignedByte,
ViewAddressAscii,
ViewAddressUnicode,
ViewHexCodepage,
ViewTextCodepage
};
void setView(ViewEnum_t view);
};

View File

@ -13,7 +13,7 @@ TraceFileDump::~TraceFileDump()
void TraceFileDump::clear()
{
maxIndex = 0;
maxIndex = 0ull;
dump.clear();
}
@ -150,3 +150,41 @@ void TraceFileDump::findMemAreas()
}
while(true);
}
// TraceFileDumpMemoryPage
TraceFileDumpMemoryPage::TraceFileDumpMemoryPage(QObject* parent) : MemoryPage(0, 0, parent)
{
dump = nullptr;
}
void TraceFileDumpMemoryPage::setSelectedIndex(unsigned long long index)
{
if(dump)
selectedIndex = std::min(index, dump->getMaxIndex());
else
selectedIndex = 0ull;
}
void TraceFileDumpMemoryPage::setDumpObject(TraceFileDump* dump)
{
this->dump = dump;
}
unsigned long long TraceFileDumpMemoryPage::getSelectedIndex() const
{
return selectedIndex;
}
bool TraceFileDumpMemoryPage::read(void* parDest, dsint parRVA, duint parSize) const
{
if(!dump)
return false;
auto buffer = dump->getBytes(mBase + parRVA, parSize, selectedIndex);
memcpy(parDest, buffer.data(), parSize);
return true;
}
bool TraceFileDumpMemoryPage::write(const void* parDest, dsint parRVA, duint parSize)
{
return false; // write is not supported
}

View File

@ -2,6 +2,7 @@
#include "Imports.h"
#include <map>
#include "MemoryPage.h"
class TraceFileDump
{
@ -49,3 +50,18 @@ private:
std::map<Key, DumpRecord> dump;
unsigned long long maxIndex;
};
class TraceFileDumpMemoryPage : public MemoryPage
{
Q_OBJECT
public:
TraceFileDumpMemoryPage(QObject* parent = 0);
virtual bool read(void* parDest, dsint parRVA, duint parSize) const override;
virtual bool write(const void* parDest, dsint parRVA, duint parSize) override;
void setSelectedIndex(unsigned long long index);
unsigned long long getSelectedIndex() const;
void setDumpObject(TraceFileDump* dump);
private:
TraceFileDump* dump;
unsigned long long selectedIndex = 0ull;
};

View File

@ -123,6 +123,11 @@ unsigned long long TraceFileReader::Length() const
return length;
}
TraceFileDump* TraceFileReader::getDump()
{
return &dump;
}
QString TraceFileReader::getIndexText(unsigned long long index) const
{
QString indexString;

View File

@ -43,6 +43,7 @@ public:
void buildDumpTo(unsigned long long index);
std::vector<unsigned long long> getReferences(duint startAddr, duint endAddr) const;
void debugdump(unsigned long long index);
TraceFileDump* getDump();
signals:
void parseFinished();

View File

@ -2,6 +2,7 @@
#include "ui_TraceWidget.h"
#include "TraceBrowser.h"
#include "TraceInfoBox.h"
#include "TraceDump.h"
#include "TraceFileReader.h"
#include "TraceRegisters.h"
#include "StdTable.h"
@ -16,6 +17,8 @@ TraceWidget::TraceWidget(QWidget* parent) :
mTraceWidget = new TraceBrowser(this);
mOverview = new StdTable(this);
mInfo = new TraceInfoBox(this);
mMemoryPage = new TraceFileDumpMemoryPage(this);
mDump = new TraceDump(mTraceWidget, mMemoryPage, this);
mGeneralRegs = new TraceRegisters(this);
//disasm
ui->mTopLeftUpperRightFrameLayout->addWidget(mTraceWidget);
@ -44,7 +47,12 @@ TraceWidget::TraceWidget(QWidget* parent) :
ui->mTopHSplitter->setCollapsible(1, true); // allow collapsing the RegisterView
//info
ui->mTopLeftLowerFrameLayout->addWidget(mInfo);
//ui->mTopLeftLowerFrameLayout->addWidget(mInfo);
ui->mTopLeftUpperRightFrameLayout->addWidget(mInfo);
//dump
ui->mTopLeftLowerFrameLayout->addWidget(mDump);
int height = (mInfo->getRowHeight() + 1) * 4;
ui->mTopLeftLowerFrame->setMinimumHeight(height + 2);
ui->mTopHSplitter->setSizes(QList<int>({1000, 1}));
@ -80,10 +88,14 @@ void TraceWidget::traceSelectionChanged(unsigned long long selection)
{
registers = traceFile->Registers(selection);
mInfo->update(selection, traceFile, registers);
traceFile->buildDumpTo(selection);
mMemoryPage->setDumpObject(traceFile->getDump());
}
else
memset(&registers, 0, sizeof(registers));
}
else
mMemoryPage->setDumpObject(nullptr);
mGeneralRegs->setRegisters(&registers);
}

View File

@ -8,7 +8,9 @@ class CPUWidget;
class TraceRegisters;
class TraceBrowser;
class TraceFileReader;
class TraceFileDumpMemoryPage;
class TraceInfoBox;
class TraceDump;
class StdTable;
namespace Ui
@ -33,7 +35,9 @@ protected slots:
protected:
TraceBrowser* mTraceWidget;
TraceInfoBox* mInfo;
TraceDump* mDump;
TraceRegisters* mGeneralRegs;
TraceFileDumpMemoryPage* mMemoryPage;
StdTable* mOverview;
private:

View File

@ -14,24 +14,6 @@
<string>Form</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<property name="spacing">
<number>0</number>
</property>
<property name="sizeConstraint">
<enum>QLayout::SetMaximumSize</enum>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QSplitter" name="mVSplitter">
<property name="orientation">
@ -54,12 +36,6 @@
<bool>false</bool>
</property>
<widget class="QSplitter" name="mTopLeftVSplitter">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
@ -67,40 +43,45 @@
<number>1</number>
</property>
<property name="childrenCollapsible">
<bool>true</bool>
<bool>false</bool>
</property>
<widget class="QFrame" name="mTopLeftUpperRightFrame">
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
<widget class="QSplitter" name="mTopLeftUpperHSplitter">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
<property name="handleWidth">
<number>1</number>
</property>
<layout class="QVBoxLayout" name="mTopLeftUpperRightFrameLayout">
<property name="spacing">
<number>0</number>
<property name="childrenCollapsible">
<bool>false</bool>
</property>
<widget class="QFrame" name="mTopLeftUpperRightFrame">
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="leftMargin">
<number>0</number>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
</layout>
<layout class="QVBoxLayout" name="mTopLeftUpperRightFrameLayout">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
</layout>
</widget>
</widget>
<widget class="QFrame" name="mTopLeftLowerFrame">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Minimum">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
@ -123,16 +104,13 @@
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<layout class="QVBoxLayout" name="mTopLeftLowerFrameLayout_2"/>
</item>
</layout>
</widget>
</widget>
<widget class="QSplitter" name="mTopRightVSplitter">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
@ -143,19 +121,13 @@
<bool>false</bool>
</property>
<widget class="QFrame" name="mTopRightUpperFrame">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QVBoxLayout" name="mTopRightUpperFrameLayout">
<layout class="QVBoxLayout" name="mTopRightUpperFrameLayout_2">
<property name="spacing">
<number>0</number>
</property>
@ -171,41 +143,87 @@
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<layout class="QVBoxLayout" name="mTopRightUpperFrameLayout"/>
</item>
</layout>
</widget>
<widget class="QFrame" name="mTopRightLowerFrame">
<property name="sizePolicy">
<sizepolicy hsizetype="Minimum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QVBoxLayout" name="mTopRightLowerFrameLayout">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<layout class="QVBoxLayout" name="mTopRightLowerFrameLayout"/>
</item>
</layout>
</widget>
</widget>
</widget>
<widget class="QSplitter" name="mBotHSplitter">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="handleWidth">
<number>1</number>
</property>
<property name="childrenCollapsible">
<bool>false</bool>
</property>
<widget class="QFrame" name="mBotLeftFrame">
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QVBoxLayout" name="mBotLeftFrameLayout">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
</layout>
</widget>
<widget class="QFrame" name="mBotRightFrame">
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
<layout class="QVBoxLayout" name="mBotRightFrameLayout">
<property name="spacing">
<number>0</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
</layout>
</widget>
</widget>
</widget>
</item>
</layout>

View File

@ -80,6 +80,7 @@ SOURCES += \
Src/Gui/RichTextItemDelegate.cpp \
Src/Gui/SystemBreakpointScriptDialog.cpp \
Src/Imports.cpp \
Src/Tracer/TraceDump.cpp \
Src/Tracer/TraceFileDump.cpp \
Src/Tracer/TraceInfoBox.cpp \
Src/Tracer/TraceRegisters.cpp \
@ -203,6 +204,7 @@ HEADERS += \
Src/Gui/CPURegistersView.h \
Src/Gui/RichTextItemDelegate.h \
Src/Gui/SystemBreakpointScriptDialog.h \
Src/Tracer/TraceDump.h \
Src/Tracer/TraceFileDump.h \
Src/Tracer/TraceInfoBox.h \
Src/Tracer/TraceRegisters.h \