DBG+BRIDGE+GUI: no more TitanEngine in the bridge (added separate structures + translation functions)
This commit is contained in:
parent
3394b99aa7
commit
6c33a17858
|
@ -2,7 +2,6 @@
|
|||
#define _BRIDGEMAIN_H_
|
||||
|
||||
#include <windows.h>
|
||||
#include "..\x64_dbg_dbg\TitanEngine\TitanEngine.h"
|
||||
|
||||
#ifndef __cplusplus
|
||||
#include <stdbool.h>
|
||||
|
@ -386,7 +385,7 @@ typedef struct
|
|||
bool IE;
|
||||
|
||||
unsigned short RC;
|
||||
} MxCsr_FIELDS_t;
|
||||
} MXCSRFIELDS;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
|
@ -406,7 +405,7 @@ typedef struct
|
|||
|
||||
unsigned short TOP;
|
||||
|
||||
} x87StatusWord_FIELDS_t;
|
||||
} X87STATUSWORDFIELDS;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
|
@ -422,17 +421,80 @@ typedef struct
|
|||
unsigned short RC;
|
||||
unsigned short PC;
|
||||
|
||||
} x87ControlWord_FIELDS_t;
|
||||
} X87CONTROLWORDFIELDS;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
TITAN_ENGINE_CONTEXT_t titcontext;
|
||||
BYTE data[10];
|
||||
int st_value;
|
||||
int tag;
|
||||
} X87FPUREGISTER;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
WORD ControlWord;
|
||||
WORD StatusWord;
|
||||
WORD TagWord;
|
||||
DWORD ErrorOffset;
|
||||
DWORD ErrorSelector;
|
||||
DWORD DataOffset;
|
||||
DWORD DataSelector;
|
||||
DWORD Cr0NpxState;
|
||||
} X87FPU;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
ULONG_PTR cax;
|
||||
ULONG_PTR ccx;
|
||||
ULONG_PTR cdx;
|
||||
ULONG_PTR cbx;
|
||||
ULONG_PTR csp;
|
||||
ULONG_PTR cbp;
|
||||
ULONG_PTR csi;
|
||||
ULONG_PTR cdi;
|
||||
#ifdef _WIN64
|
||||
ULONG_PTR r8;
|
||||
ULONG_PTR r9;
|
||||
ULONG_PTR r10;
|
||||
ULONG_PTR r11;
|
||||
ULONG_PTR r12;
|
||||
ULONG_PTR r13;
|
||||
ULONG_PTR r14;
|
||||
ULONG_PTR r15;
|
||||
#endif //_WIN64
|
||||
ULONG_PTR cip;
|
||||
ULONG_PTR eflags;
|
||||
unsigned short gs;
|
||||
unsigned short fs;
|
||||
unsigned short es;
|
||||
unsigned short ds;
|
||||
unsigned short cs;
|
||||
unsigned short ss;
|
||||
ULONG_PTR dr0;
|
||||
ULONG_PTR dr1;
|
||||
ULONG_PTR dr2;
|
||||
ULONG_PTR dr3;
|
||||
ULONG_PTR dr6;
|
||||
ULONG_PTR dr7;
|
||||
BYTE RegisterArea[80];
|
||||
X87FPU x87fpu;
|
||||
DWORD MxCsr;
|
||||
#ifdef _WIN64
|
||||
M128A XmmRegisters[16];
|
||||
#else // x86
|
||||
M128A XmmRegisters[8];
|
||||
#endif
|
||||
} REGISTERCONTEXT;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
REGISTERCONTEXT regcontext;
|
||||
FLAGS flags;
|
||||
x87FPURegister_t x87FPURegisters[8];
|
||||
uint64_t mmx[8];
|
||||
MxCsr_FIELDS_t MxCsrFields;
|
||||
x87StatusWord_FIELDS_t x87StatusWordFields;
|
||||
x87ControlWord_FIELDS_t x87ControlWordFields;
|
||||
X87FPUREGISTER x87FPURegisters[8];
|
||||
unsigned long long mmx[8];
|
||||
MXCSRFIELDS MxCsrFields;
|
||||
X87STATUSWORDFIELDS x87StatusWordFields;
|
||||
X87CONTROLWORDFIELDS x87ControlWordFields;
|
||||
} REGDUMP;
|
||||
|
||||
typedef struct
|
||||
|
|
|
@ -333,7 +333,7 @@ extern "C" DLL_EXPORT int _dbg_bpgettypeat(duint addr)
|
|||
return cacheResult;
|
||||
}
|
||||
|
||||
void GetMxCsrFields(MxCsr_FIELDS_t* MxCsrFields, DWORD MxCsr)
|
||||
static void GetMxCsrFields(MXCSRFIELDS* MxCsrFields, DWORD MxCsr)
|
||||
{
|
||||
MxCsrFields->DAZ = valmxcsrflagfromstring(MxCsr, "DAZ");
|
||||
MxCsrFields->DE = valmxcsrflagfromstring(MxCsr, "DE");
|
||||
|
@ -353,7 +353,7 @@ void GetMxCsrFields(MxCsr_FIELDS_t* MxCsrFields, DWORD MxCsr)
|
|||
MxCsrFields->RC = valmxcsrfieldfromstring(MxCsr, "RC");
|
||||
}
|
||||
|
||||
void Getx87ControlWordFields(x87ControlWord_FIELDS_t* x87ControlWordFields, WORD ControlWord)
|
||||
static void Getx87ControlWordFields(X87CONTROLWORDFIELDS* x87ControlWordFields, WORD ControlWord)
|
||||
{
|
||||
x87ControlWordFields->DM = valx87controlwordflagfromstring(ControlWord, "DM");
|
||||
x87ControlWordFields->IC = valx87controlwordflagfromstring(ControlWord, "IC");
|
||||
|
@ -368,7 +368,7 @@ void Getx87ControlWordFields(x87ControlWord_FIELDS_t* x87ControlWordFields, WORD
|
|||
x87ControlWordFields->PC = valx87controlwordfieldfromstring(ControlWord, "PC");
|
||||
}
|
||||
|
||||
void Getx87StatusWordFields(x87StatusWord_FIELDS_t* x87StatusWordFields, WORD StatusWord)
|
||||
static void Getx87StatusWordFields(X87STATUSWORDFIELDS* x87StatusWordFields, WORD StatusWord)
|
||||
{
|
||||
x87StatusWordFields->B = valx87statuswordflagfromstring(StatusWord, "B");
|
||||
x87StatusWordFields->C0 = valx87statuswordflagfromstring(StatusWord, "C0");
|
||||
|
@ -387,6 +387,71 @@ void Getx87StatusWordFields(x87StatusWord_FIELDS_t* x87StatusWordFields, WORD St
|
|||
x87StatusWordFields->TOP = valx87statuswordfieldfromstring(StatusWord, "TOP");
|
||||
}
|
||||
|
||||
static void TranslateTitanFpu(const x87FPU_t* titanfpu, X87FPU* fpu)
|
||||
{
|
||||
fpu->ControlWord = titanfpu->ControlWord;
|
||||
fpu->StatusWord = titanfpu->StatusWord;
|
||||
fpu->TagWord = titanfpu->TagWord;
|
||||
fpu->ErrorOffset = titanfpu->ErrorOffset;
|
||||
fpu->ErrorSelector = titanfpu->ErrorSelector;
|
||||
fpu->DataOffset = titanfpu->DataOffset;
|
||||
fpu->DataSelector = titanfpu->DataSelector;
|
||||
fpu->Cr0NpxState = titanfpu->Cr0NpxState;
|
||||
}
|
||||
|
||||
static void TranslateTitanContextToRegContext(const TITAN_ENGINE_CONTEXT_t* titcontext, REGISTERCONTEXT* regcontext)
|
||||
{
|
||||
regcontext->cax = titcontext->cax;
|
||||
regcontext->ccx = titcontext->ccx;
|
||||
regcontext->cdx = titcontext->cdx;
|
||||
regcontext->cbx = titcontext->cbx;
|
||||
regcontext->csp = titcontext->csp;
|
||||
regcontext->cbp = titcontext->cbp;
|
||||
regcontext->csi = titcontext->csi;
|
||||
regcontext->cdi = titcontext->cdi;
|
||||
#ifdef _WIN64
|
||||
regcontext->r8 = titcontext->r8;
|
||||
regcontext->r9 = titcontext->r9;
|
||||
regcontext->r10 = titcontext->r10;
|
||||
regcontext->r11 = titcontext->r11;
|
||||
regcontext->r12 = titcontext->r12;
|
||||
regcontext->r13 = titcontext->r13;
|
||||
regcontext->r14 = titcontext->r14;
|
||||
regcontext->r15 = titcontext->r15;
|
||||
#endif //_WIN64
|
||||
regcontext->cip = titcontext->cip;
|
||||
regcontext->eflags = titcontext->eflags;
|
||||
regcontext->gs = titcontext->gs;
|
||||
regcontext->fs = titcontext->fs;
|
||||
regcontext->es = titcontext->es;
|
||||
regcontext->ds = titcontext->ds;
|
||||
regcontext->cs = titcontext->cs;
|
||||
regcontext->ss = titcontext->ss;
|
||||
regcontext->dr0 = titcontext->dr0;
|
||||
regcontext->dr1 = titcontext->dr1;
|
||||
regcontext->dr2 = titcontext->dr2;
|
||||
regcontext->dr3 = titcontext->dr3;
|
||||
regcontext->dr6 = titcontext->dr6;
|
||||
regcontext->dr7 = titcontext->dr7;
|
||||
memcpy(regcontext->RegisterArea, titcontext->RegisterArea, sizeof(regcontext->RegisterArea));
|
||||
TranslateTitanFpu(&titcontext->x87fpu, ®context->x87fpu);
|
||||
regcontext->MxCsr = titcontext->MxCsr;
|
||||
memcpy(regcontext->XmmRegisters, titcontext->XmmRegisters, sizeof(regcontext->XmmRegisters));
|
||||
}
|
||||
|
||||
static void TranslateTitanFpuRegister(const x87FPURegister_t* titanReg, X87FPUREGISTER* reg)
|
||||
{
|
||||
memcpy(reg->data, titanReg->data, sizeof(reg->data));
|
||||
reg->st_value = titanReg->st_value;
|
||||
reg->tag = titanReg->tag;
|
||||
}
|
||||
|
||||
static void TranslateTitanFpuRegisters(const x87FPURegister_t titanFpu[8], X87FPUREGISTER fpu[8])
|
||||
{
|
||||
for(int i = 0; i < 8; i++)
|
||||
TranslateTitanFpuRegister(&titanFpu[i], &fpu[i]);
|
||||
}
|
||||
|
||||
extern "C" DLL_EXPORT bool _dbg_getregdump(REGDUMP* regdump)
|
||||
{
|
||||
if(!DbgIsDebugging())
|
||||
|
@ -395,10 +460,12 @@ extern "C" DLL_EXPORT bool _dbg_getregdump(REGDUMP* regdump)
|
|||
return true;
|
||||
}
|
||||
|
||||
if(!GetFullContextDataEx(hActiveThread, & (regdump->titcontext)))
|
||||
TITAN_ENGINE_CONTEXT_t titcontext;
|
||||
if(!GetFullContextDataEx(hActiveThread, &titcontext))
|
||||
return false;
|
||||
TranslateTitanContextToRegContext(&titcontext, ®dump->regcontext);
|
||||
|
||||
duint cflags = regdump->titcontext.eflags;
|
||||
duint cflags = regdump->regcontext.eflags;
|
||||
regdump->flags.c = valflagfromstring(cflags, "cf");
|
||||
regdump->flags.p = valflagfromstring(cflags, "pf");
|
||||
regdump->flags.a = valflagfromstring(cflags, "af");
|
||||
|
@ -409,12 +476,14 @@ extern "C" DLL_EXPORT bool _dbg_getregdump(REGDUMP* regdump)
|
|||
regdump->flags.d = valflagfromstring(cflags, "df");
|
||||
regdump->flags.o = valflagfromstring(cflags, "of");
|
||||
|
||||
Getx87FPURegisters(regdump->x87FPURegisters, & (regdump->titcontext));
|
||||
GetMMXRegisters(regdump->mmx, & (regdump->titcontext));
|
||||
GetMxCsrFields(& (regdump->MxCsrFields), regdump->titcontext.MxCsr);
|
||||
Getx87ControlWordFields(& (regdump->x87ControlWordFields), regdump->titcontext.x87fpu.ControlWord);
|
||||
Getx87StatusWordFields(& (regdump->x87StatusWordFields), regdump->titcontext.x87fpu.StatusWord);
|
||||
x87FPURegister_t x87FPURegisters[8];
|
||||
Getx87FPURegisters(x87FPURegisters, &titcontext);
|
||||
TranslateTitanFpuRegisters(x87FPURegisters, regdump->x87FPURegisters);
|
||||
|
||||
GetMMXRegisters(regdump->mmx, &titcontext);
|
||||
GetMxCsrFields(& (regdump->MxCsrFields), regdump->regcontext.MxCsr);
|
||||
Getx87ControlWordFields(& (regdump->x87ControlWordFields), regdump->regcontext.x87fpu.ControlWord);
|
||||
Getx87StatusWordFields(& (regdump->x87StatusWordFields), regdump->regcontext.x87fpu.StatusWord);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -158,19 +158,19 @@ void CPUSideBar::paintEvent(QPaintEvent* event)
|
|||
|
||||
const int_t cur_VA = CodePtr->getBase() + InstrBuffer->at(line).rva;
|
||||
#ifdef _WIN64
|
||||
if(cur_VA == regDump.titcontext.cax) drawLabel(&painter, line, "RAX");
|
||||
if(cur_VA == regDump.titcontext.cbx) drawLabel(&painter, line, "RBX");
|
||||
if(cur_VA == regDump.titcontext.ccx) drawLabel(&painter, line, "RCX");
|
||||
if(cur_VA == regDump.titcontext.cdx) drawLabel(&painter, line, "RDX");
|
||||
if(cur_VA == regDump.titcontext.csi) drawLabel(&painter, line, "RSI");
|
||||
if(cur_VA == regDump.titcontext.cdi) drawLabel(&painter, line, "RDI");
|
||||
if(cur_VA == regDump.regcontext.cax) drawLabel(&painter, line, "RAX");
|
||||
if(cur_VA == regDump.regcontext.cbx) drawLabel(&painter, line, "RBX");
|
||||
if(cur_VA == regDump.regcontext.ccx) drawLabel(&painter, line, "RCX");
|
||||
if(cur_VA == regDump.regcontext.cdx) drawLabel(&painter, line, "RDX");
|
||||
if(cur_VA == regDump.regcontext.csi) drawLabel(&painter, line, "RSI");
|
||||
if(cur_VA == regDump.regcontext.cdi) drawLabel(&painter, line, "RDI");
|
||||
#else //x86
|
||||
if(cur_VA == regDump.titcontext.cax) drawLabel(&painter, line, "EAX");
|
||||
if(cur_VA == regDump.titcontext.cbx) drawLabel(&painter, line, "EBX");
|
||||
if(cur_VA == regDump.titcontext.ccx) drawLabel(&painter, line, "ECX");
|
||||
if(cur_VA == regDump.titcontext.cdx) drawLabel(&painter, line, "EDX");
|
||||
if(cur_VA == regDump.titcontext.csi) drawLabel(&painter, line, "ESI");
|
||||
if(cur_VA == regDump.titcontext.cdi) drawLabel(&painter, line, "EDI");
|
||||
if(cur_VA == regDump.regcontext.cax) drawLabel(&painter, line, "EAX");
|
||||
if(cur_VA == regDump.regcontext.cbx) drawLabel(&painter, line, "EBX");
|
||||
if(cur_VA == regDump.regcontext.ccx) drawLabel(&painter, line, "ECX");
|
||||
if(cur_VA == regDump.regcontext.cdx) drawLabel(&painter, line, "EDX");
|
||||
if(cur_VA == regDump.regcontext.csi) drawLabel(&painter, line, "ESI");
|
||||
if(cur_VA == regDump.regcontext.cdi) drawLabel(&painter, line, "EDI");
|
||||
#endif
|
||||
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
#include "LineEditDialog.h"
|
||||
#include "SelectFields.h"
|
||||
#include <QMessageBox>
|
||||
#include <ctype.h>
|
||||
#include <stdint.h>
|
||||
|
||||
void RegistersView::SetChangeButton(QPushButton* push_button)
|
||||
{
|
||||
|
@ -1250,8 +1250,6 @@ QString RegistersView::getRegisterLabel(REGISTER_NAME register_selected)
|
|||
return newText;
|
||||
}
|
||||
|
||||
#include <limits>
|
||||
#include <cmath>
|
||||
double readFloat80(const uint8_t buffer[10])
|
||||
{
|
||||
/*
|
||||
|
@ -1643,7 +1641,7 @@ void RegistersView::drawRegister(QPainter* p, REGISTER_NAME reg, char* value)
|
|||
if(mRegisterUpdates.contains(x87SW_TOP))
|
||||
p->setPen(ConfigColor("RegistersModifiedColor"));
|
||||
|
||||
newText = QString("ST%1 ").arg(((x87FPURegister_t*) registerValue(&wRegDumpStruct, reg))->st_value);
|
||||
newText = QString("ST%1 ").arg(((X87FPUREGISTER*) registerValue(&wRegDumpStruct, reg))->st_value);
|
||||
width = newText.length() * mCharWidth;
|
||||
p->drawText(x, y, width, mRowHeight, Qt::AlignVCenter, newText);
|
||||
|
||||
|
@ -1686,7 +1684,7 @@ void RegistersView::drawRegister(QPainter* p, REGISTER_NAME reg, char* value)
|
|||
p->setPen(ConfigColor("RegistersModifiedColor"));
|
||||
}
|
||||
|
||||
newText += GetTagWordStateString(((x87FPURegister_t*) registerValue(&wRegDumpStruct, reg))->tag) + QString(" ");
|
||||
newText += GetTagWordStateString(((X87FPUREGISTER*) registerValue(&wRegDumpStruct, reg))->tag) + QString(" ");
|
||||
|
||||
width = newText.length() * mCharWidth;
|
||||
p->drawText(x, y, width, mRowHeight, Qt::AlignVCenter, newText);
|
||||
|
@ -1700,7 +1698,7 @@ void RegistersView::drawRegister(QPainter* p, REGISTER_NAME reg, char* value)
|
|||
if(DbgIsDebugging() && mRegisterUpdates.contains(reg))
|
||||
p->setPen(ConfigColor("RegistersModifiedColor"));
|
||||
|
||||
newText += QString::number(readFloat80(((x87FPURegister_t*) registerValue(&wRegDumpStruct, reg))->data));
|
||||
newText += QString::number(readFloat80(((X87FPUREGISTER*) registerValue(&wRegDumpStruct, reg))->data));
|
||||
width = newText.length() * mCharWidth;
|
||||
p->drawText(x, y, width, mRowHeight, Qt::AlignVCenter, newText);
|
||||
}
|
||||
|
@ -2146,26 +2144,26 @@ char* RegistersView::registerValue(const REGDUMP* regd, const REGISTER_NAME reg)
|
|||
static int null_value = 0;
|
||||
// this is probably the most efficient general method to access the values of the struct
|
||||
// TODO: add an array with something like: return array[reg].data, this is more fast :-)
|
||||
if(reg == CAX) return (char*) & (regd->titcontext.cax);
|
||||
if(reg == CBX) return (char*) & (regd->titcontext.cbx);
|
||||
if(reg == CCX) return (char*) & (regd->titcontext.ccx);
|
||||
if(reg == CDX) return (char*) & (regd->titcontext.cdx);
|
||||
if(reg == CSI) return (char*) & (regd->titcontext.csi);
|
||||
if(reg == CDI) return (char*) & (regd->titcontext.cdi);
|
||||
if(reg == CBP) return (char*) & (regd->titcontext.cbp);
|
||||
if(reg == CSP) return (char*) & (regd->titcontext.csp);
|
||||
if(reg == CAX) return (char*) & (regd->regcontext.cax);
|
||||
if(reg == CBX) return (char*) & (regd->regcontext.cbx);
|
||||
if(reg == CCX) return (char*) & (regd->regcontext.ccx);
|
||||
if(reg == CDX) return (char*) & (regd->regcontext.cdx);
|
||||
if(reg == CSI) return (char*) & (regd->regcontext.csi);
|
||||
if(reg == CDI) return (char*) & (regd->regcontext.cdi);
|
||||
if(reg == CBP) return (char*) & (regd->regcontext.cbp);
|
||||
if(reg == CSP) return (char*) & (regd->regcontext.csp);
|
||||
|
||||
if(reg == CIP) return (char*) & (regd->titcontext.cip);
|
||||
if(reg == EFLAGS) return (char*) & (regd->titcontext.eflags);
|
||||
if(reg == CIP) return (char*) & (regd->regcontext.cip);
|
||||
if(reg == EFLAGS) return (char*) & (regd->regcontext.eflags);
|
||||
#ifdef _WIN64
|
||||
if(reg == R8) return (char*) & (regd->titcontext.r8);
|
||||
if(reg == R9) return (char*) & (regd->titcontext.r9);
|
||||
if(reg == R10) return (char*) & (regd->titcontext.r10);
|
||||
if(reg == R11) return (char*) & (regd->titcontext.r11);
|
||||
if(reg == R12) return (char*) & (regd->titcontext.r12);
|
||||
if(reg == R13) return (char*) & (regd->titcontext.r13);
|
||||
if(reg == R14) return (char*) & (regd->titcontext.r14);
|
||||
if(reg == R15) return (char*) & (regd->titcontext.r15);
|
||||
if(reg == R8) return (char*) & (regd->regcontext.r8);
|
||||
if(reg == R9) return (char*) & (regd->regcontext.r9);
|
||||
if(reg == R10) return (char*) & (regd->regcontext.r10);
|
||||
if(reg == R11) return (char*) & (regd->regcontext.r11);
|
||||
if(reg == R12) return (char*) & (regd->regcontext.r12);
|
||||
if(reg == R13) return (char*) & (regd->regcontext.r13);
|
||||
if(reg == R14) return (char*) & (regd->regcontext.r14);
|
||||
if(reg == R15) return (char*) & (regd->regcontext.r15);
|
||||
#endif
|
||||
// CF,PF,AF,ZF,SF,TF,IF,DF,OF
|
||||
if(reg == CF) return (char*) & (regd->flags.c);
|
||||
|
@ -2179,19 +2177,19 @@ char* RegistersView::registerValue(const REGDUMP* regd, const REGISTER_NAME reg)
|
|||
if(reg == OF) return (char*) & (regd->flags.o);
|
||||
|
||||
// GS,FS,ES,DS,CS,SS
|
||||
if(reg == GS) return (char*) & (regd->titcontext.gs);
|
||||
if(reg == FS) return (char*) & (regd->titcontext.fs);
|
||||
if(reg == ES) return (char*) & (regd->titcontext.es);
|
||||
if(reg == DS) return (char*) & (regd->titcontext.ds);
|
||||
if(reg == CS) return (char*) & (regd->titcontext.cs);
|
||||
if(reg == SS) return (char*) & (regd->titcontext.ss);
|
||||
if(reg == GS) return (char*) & (regd->regcontext.gs);
|
||||
if(reg == FS) return (char*) & (regd->regcontext.fs);
|
||||
if(reg == ES) return (char*) & (regd->regcontext.es);
|
||||
if(reg == DS) return (char*) & (regd->regcontext.ds);
|
||||
if(reg == CS) return (char*) & (regd->regcontext.cs);
|
||||
if(reg == SS) return (char*) & (regd->regcontext.ss);
|
||||
|
||||
if(reg == DR0) return (char*) & (regd->titcontext.dr0);
|
||||
if(reg == DR1) return (char*) & (regd->titcontext.dr1);
|
||||
if(reg == DR2) return (char*) & (regd->titcontext.dr2);
|
||||
if(reg == DR3) return (char*) & (regd->titcontext.dr3);
|
||||
if(reg == DR6) return (char*) & (regd->titcontext.dr6);
|
||||
if(reg == DR7) return (char*) & (regd->titcontext.dr7);
|
||||
if(reg == DR0) return (char*) & (regd->regcontext.dr0);
|
||||
if(reg == DR1) return (char*) & (regd->regcontext.dr1);
|
||||
if(reg == DR2) return (char*) & (regd->regcontext.dr2);
|
||||
if(reg == DR3) return (char*) & (regd->regcontext.dr3);
|
||||
if(reg == DR6) return (char*) & (regd->regcontext.dr6);
|
||||
if(reg == DR7) return (char*) & (regd->regcontext.dr7);
|
||||
|
||||
if(reg == MM0) return (char*) & (regd->mmx[0]);
|
||||
if(reg == MM1) return (char*) & (regd->mmx[1]);
|
||||
|
@ -2211,9 +2209,9 @@ char* RegistersView::registerValue(const REGDUMP* regd, const REGISTER_NAME reg)
|
|||
if(reg == x87r6) return (char*) & (regd->x87FPURegisters[6]);
|
||||
if(reg == x87r7) return (char*) & (regd->x87FPURegisters[7]);
|
||||
|
||||
if(reg == x87TagWord) return (char*) & (regd->titcontext.x87fpu.TagWord);
|
||||
if(reg == x87TagWord) return (char*) & (regd->regcontext.x87fpu.TagWord);
|
||||
|
||||
if(reg == x87ControlWord) return (char*) & (regd->titcontext.x87fpu.ControlWord);
|
||||
if(reg == x87ControlWord) return (char*) & (regd->regcontext.x87fpu.ControlWord);
|
||||
|
||||
if(reg == x87TW_0) return (char*) & (regd->x87FPURegisters[0].tag);
|
||||
if(reg == x87TW_1) return (char*) & (regd->x87FPURegisters[1].tag);
|
||||
|
@ -2235,7 +2233,7 @@ char* RegistersView::registerValue(const REGDUMP* regd, const REGISTER_NAME reg)
|
|||
if(reg == x87CW_RC) return (char*) & (regd->x87ControlWordFields.RC);
|
||||
if(reg == x87CW_PC) return (char*) & (regd->x87ControlWordFields.PC);
|
||||
|
||||
if(reg == x87StatusWord) return (char*) & (regd->titcontext.x87fpu.StatusWord);
|
||||
if(reg == x87StatusWord) return (char*) & (regd->regcontext.x87fpu.StatusWord);
|
||||
|
||||
if(reg == x87SW_B) return (char*) & (regd->x87StatusWordFields.B);
|
||||
if(reg == x87SW_C3) return (char*) & (regd->x87StatusWordFields.C3);
|
||||
|
@ -2252,7 +2250,7 @@ char* RegistersView::registerValue(const REGDUMP* regd, const REGISTER_NAME reg)
|
|||
if(reg == x87SW_C0) return (char*) & (regd->x87StatusWordFields.C0);
|
||||
if(reg == x87SW_TOP) return (char*) & (regd->x87StatusWordFields.TOP);
|
||||
|
||||
if(reg == MxCsr) return (char*) & (regd->titcontext.MxCsr);
|
||||
if(reg == MxCsr) return (char*) & (regd->regcontext.MxCsr);
|
||||
|
||||
if(reg == MxCsr_FZ) return (char*) & (regd->MxCsrFields.FZ);
|
||||
if(reg == MxCsr_PM) return (char*) & (regd->MxCsrFields.PM);
|
||||
|
@ -2270,22 +2268,22 @@ char* RegistersView::registerValue(const REGDUMP* regd, const REGISTER_NAME reg)
|
|||
if(reg == MxCsr_IE) return (char*) & (regd->MxCsrFields.IE);
|
||||
if(reg == MxCsr_RC) return (char*) & (regd->MxCsrFields.RC);
|
||||
|
||||
if(reg == XMM0) return (char*) & (regd->titcontext.XmmRegisters[0]);
|
||||
if(reg == XMM1) return (char*) & (regd->titcontext.XmmRegisters[1]);
|
||||
if(reg == XMM2) return (char*) & (regd->titcontext.XmmRegisters[2]);
|
||||
if(reg == XMM3) return (char*) & (regd->titcontext.XmmRegisters[3]);
|
||||
if(reg == XMM4) return (char*) & (regd->titcontext.XmmRegisters[4]);
|
||||
if(reg == XMM5) return (char*) & (regd->titcontext.XmmRegisters[5]);
|
||||
if(reg == XMM6) return (char*) & (regd->titcontext.XmmRegisters[6]);
|
||||
if(reg == XMM7) return (char*) & (regd->titcontext.XmmRegisters[7]);
|
||||
if(reg == XMM8) return (char*) & (regd->titcontext.XmmRegisters[8]);
|
||||
if(reg == XMM9) return (char*) & (regd->titcontext.XmmRegisters[9]);
|
||||
if(reg == XMM10) return (char*) & (regd->titcontext.XmmRegisters[10]);
|
||||
if(reg == XMM11) return (char*) & (regd->titcontext.XmmRegisters[11]);
|
||||
if(reg == XMM12) return (char*) & (regd->titcontext.XmmRegisters[12]);
|
||||
if(reg == XMM13) return (char*) & (regd->titcontext.XmmRegisters[13]);
|
||||
if(reg == XMM14) return (char*) & (regd->titcontext.XmmRegisters[14]);
|
||||
if(reg == XMM15) return (char*) & (regd->titcontext.XmmRegisters[15]);
|
||||
if(reg == XMM0) return (char*) & (regd->regcontext.XmmRegisters[0]);
|
||||
if(reg == XMM1) return (char*) & (regd->regcontext.XmmRegisters[1]);
|
||||
if(reg == XMM2) return (char*) & (regd->regcontext.XmmRegisters[2]);
|
||||
if(reg == XMM3) return (char*) & (regd->regcontext.XmmRegisters[3]);
|
||||
if(reg == XMM4) return (char*) & (regd->regcontext.XmmRegisters[4]);
|
||||
if(reg == XMM5) return (char*) & (regd->regcontext.XmmRegisters[5]);
|
||||
if(reg == XMM6) return (char*) & (regd->regcontext.XmmRegisters[6]);
|
||||
if(reg == XMM7) return (char*) & (regd->regcontext.XmmRegisters[7]);
|
||||
if(reg == XMM8) return (char*) & (regd->regcontext.XmmRegisters[8]);
|
||||
if(reg == XMM9) return (char*) & (regd->regcontext.XmmRegisters[9]);
|
||||
if(reg == XMM10) return (char*) & (regd->regcontext.XmmRegisters[10]);
|
||||
if(reg == XMM11) return (char*) & (regd->regcontext.XmmRegisters[11]);
|
||||
if(reg == XMM12) return (char*) & (regd->regcontext.XmmRegisters[12]);
|
||||
if(reg == XMM13) return (char*) & (regd->regcontext.XmmRegisters[13]);
|
||||
if(reg == XMM14) return (char*) & (regd->regcontext.XmmRegisters[14]);
|
||||
if(reg == XMM15) return (char*) & (regd->regcontext.XmmRegisters[15]);
|
||||
|
||||
return (char*) & null_value;
|
||||
}
|
||||
|
@ -2293,11 +2291,11 @@ char* RegistersView::registerValue(const REGDUMP* regd, const REGISTER_NAME reg)
|
|||
void RegistersView::setRegisters(REGDUMP* reg)
|
||||
{
|
||||
// tests if new-register-value == old-register-value holds
|
||||
if(mCip != reg->titcontext.cip) //CIP changed
|
||||
if(mCip != reg->regcontext.cip) //CIP changed
|
||||
{
|
||||
wCipRegDumpStruct = wRegDumpStruct;
|
||||
mRegisterUpdates.clear();
|
||||
mCip = reg->titcontext.cip;
|
||||
mCip = reg->regcontext.cip;
|
||||
}
|
||||
|
||||
QMap<REGISTER_NAME, QString>::const_iterator it = mRegisterMapping.begin();
|
||||
|
@ -2314,7 +2312,7 @@ void RegistersView::setRegisters(REGDUMP* reg)
|
|||
// now we can save the values
|
||||
wRegDumpStruct = (*reg);
|
||||
|
||||
if(mCip != reg->titcontext.cip)
|
||||
if(mCip != reg->regcontext.cip)
|
||||
wCipRegDumpStruct = wRegDumpStruct;
|
||||
|
||||
// force repaint
|
||||
|
|
Loading…
Reference in New Issue