1
0
Fork 0

Added x87stX register names and menu action to switch ordering

This commit is contained in:
torusrxxx 2018-06-20 09:47:54 +08:00 committed by Duncan Ogilvie
parent 8c6a9e5fed
commit f5395cb318
3 changed files with 25 additions and 7 deletions

View File

@ -454,6 +454,7 @@ RegistersView::RegistersView(CPUWidget* parent) : QScrollArea(parent), mVScrollO
connect(Bridge::getBridge(), SIGNAL(close()), this, SLOT(onClose()));
switch(ConfigUint("Gui", "SIMDRegistersDisplayMode"))
{
default:
case 0:
wSIMDRegDispMode = SIMD_REG_DISP_HEX;
break;
@ -491,6 +492,7 @@ RegistersView::RegistersView(CPUWidget* parent) : QScrollArea(parent), mVScrollO
wSIMDRegDispMode = SIMD_REG_DISP_QWORD_HEX;
break;
}
mFpuMode = false;
// precreate ContextMenu Actions
wCM_Increment = setupAction(DIcon("register_inc.png"), tr("Increment"), this);
@ -519,6 +521,8 @@ RegistersView::RegistersView(CPUWidget* parent) : QScrollArea(parent), mVScrollO
wCM_Highlight = setupAction(DIcon("highlight.png"), tr("Highlight"), this);
mSwitchSIMDDispMode = new QMenu(tr("Change SIMD Register Display Mode"), this);
mSwitchSIMDDispMode->setIcon(DIcon("simdmode.png"));
mSwitchFPUDispMode = new QAction(tr("Change FPU Register ordering"), this);
mSwitchFPUDispMode->setCheckable(true);
SIMDHex = new QAction(tr("Hexadecimal"), mSwitchSIMDDispMode);
SIMDFloat = new QAction(tr("Float"), mSwitchSIMDDispMode);
SIMDDouble = new QAction(tr("Double"), mSwitchSIMDDispMode);
@ -555,6 +559,7 @@ RegistersView::RegistersView(CPUWidget* parent) : QScrollArea(parent), mVScrollO
connect(SIMDSQWord, SIGNAL(triggered()), this, SLOT(onSIMDMode()));
connect(SIMDUQWord, SIGNAL(triggered()), this, SLOT(onSIMDMode()));
connect(SIMDHQWord, SIGNAL(triggered()), this, SLOT(onSIMDMode()));
connect(mSwitchFPUDispMode, SIGNAL(triggered()), this, SLOT(onFpuMode()));
SIMDHex->setCheckable(true);
SIMDFloat->setCheckable(true);
SIMDDouble->setCheckable(true);
@ -571,7 +576,7 @@ RegistersView::RegistersView(CPUWidget* parent) : QScrollArea(parent), mVScrollO
SIMDFloat->setChecked(false);
SIMDDouble->setChecked(false);
SIMDSWord->setChecked(false);
SIMDUWord->setChecked(true);
SIMDUWord->setChecked(false);
SIMDHWord->setChecked(false);
SIMDSDWord->setChecked(false);
SIMDUDWord->setChecked(false);
@ -2911,6 +2916,7 @@ void RegistersView::displayCustomContextMenuSlot(QPoint pos)
SIMDSQWord->setChecked(SIMDSQWord == selectedAction);
SIMDUQWord->setChecked(SIMDUQWord == selectedAction);
SIMDHQWord->setChecked(SIMDHQWord == selectedAction);
mSwitchFPUDispMode->setChecked(mFpuMode);
if(mSelected != UNKNOWN)
{
@ -2997,6 +3003,7 @@ void RegistersView::displayCustomContextMenuSlot(QPoint pos)
{
wMenu.addMenu(mSwitchSIMDDispMode);
}
wMenu.addAction(mSwitchFPUDispMode);
wMenu.exec(this->mapToGlobal(pos));
}
@ -3006,6 +3013,7 @@ void RegistersView::displayCustomContextMenuSlot(QPoint pos)
wMenu.addAction(wCM_ChangeFPUView);
wMenu.addAction(wCM_CopyAll);
wMenu.addMenu(mSwitchSIMDDispMode);
wMenu.addAction(mSwitchFPUDispMode);
wMenu.addSeparator();
QAction* wHwbpCsp = wMenu.addAction(DIcon("breakpoint.png"), tr("Set Hardware Breakpoint on %1").arg(ArchValue("ESP", "RSP")));
QAction* wAction = wMenu.exec(this->mapToGlobal(pos));
@ -3445,6 +3453,12 @@ void RegistersView::onSIMDMode()
emit refresh();
}
void RegistersView::onFpuMode()
{
mFpuMode = !mFpuMode;
emit refresh();
}
void RegistersView::disasmSelectionChangedSlot(dsint va)
{
mHighlightRegs = mParent->getDisasmWidget()->DisassembleAt(va - mParent->getDisasmWidget()->getBase()).regsReferenced;

View File

@ -42,6 +42,7 @@ public:
DR0, DR1, DR2, DR3, DR6, DR7,
// x87 stuff
x87r0, x87r1, x87r2, x87r3, x87r4, x87r5, x87r6, x87r7,
x87st0, x87st1, x87st2, x87st3, x87st4, x87st5, x87st6, x87st7,
x87TagWord, x87ControlWord, x87StatusWord,
// x87 Tag Word fields
x87TW_0, x87TW_1, x87TW_2, x87TW_3, x87TW_4, x87TW_5,
@ -181,6 +182,7 @@ protected slots:
void InitMappings();
// switch SIMD display modes
void onSIMDMode();
void onFpuMode();
void onClose();
QString getRegisterLabel(REGISTER_NAME);
int CompareRegisters(const REGISTER_NAME reg_name, REGDUMP* regdump1, REGDUMP* regdump2);
@ -249,8 +251,10 @@ private:
unsigned int mRowHeight, mCharWidth;
// SIMD registers display mode
SIMD_REG_DISP_MODE wSIMDRegDispMode;
bool mFpuMode; //false = order by ST(X), true = order by x87rX
// context menu actions
QMenu* mSwitchSIMDDispMode;
QAction* mSwitchFPUDispMode;
QAction* mFollowInDump;
QAction* wCM_Increment;
QAction* wCM_Decrement;

View File

@ -15,12 +15,12 @@ SimpleTraceDialog::SimpleTraceDialog(QWidget* parent) :
if(!BridgeSettingGetUint("Engine", "MaxTraceCount", &setting))
setting = 50000;
ui->spinMaxTraceCount->setValue(int(setting));
ui->editBreakCondition->setPlaceholderText(tr("Example: eax == 0 && ebx == 0"));
ui->editLogText->setPlaceholderText(tr("Example: 0x{p:cip} {i:cip}"));
ui->editLogCondition->setPlaceholderText(tr("Example: eax == 0 && ebx == 0"));
ui->editCommandText->setPlaceholderText(tr("Example: eax=4;StepOut"));
ui->editCommandCondition->setPlaceholderText(tr("Example: eax == 0 && ebx == 0"));
ui->editSwitchCondition->setPlaceholderText(tr("Example: mod.party(dis.branchdest(cip)) == 1"));
ui->editBreakCondition->setPlaceholderText(tr("Example: %1").arg("eax == 0 && ebx == 0"));
ui->editLogText->setPlaceholderText(tr("Example: %1").arg("0x{p:cip} {i:cip}"));
ui->editLogCondition->setPlaceholderText(tr("Example: %1").arg("eax == 0 && ebx == 0"));
ui->editCommandText->setPlaceholderText(tr("Example: %1").arg("eax=4;StepOut"));
ui->editCommandCondition->setPlaceholderText(tr("Example: %1").arg("eax == 0 && ebx == 0"));
ui->editSwitchCondition->setPlaceholderText(tr("Example: %1").arg("mod.party(dis.branchdest(cip)) == 1"));
}
SimpleTraceDialog::~SimpleTraceDialog()