DBG+BRIDGE+GUI: deprecate DbgGetRegDump
This commit is contained in:
parent
ec0555dc0d
commit
2f26a80b78
|
@ -29,7 +29,7 @@ typedef bool (*DBGADDRINFOGET)(duint addr, SEGMENTREG segment, BRIDGE_ADDRINFO*
|
|||
typedef bool (*DBGADDRINFOSET)(duint addr, BRIDGE_ADDRINFO* addrinfo);
|
||||
typedef bool(*DBGENCODETYPESET)(duint addr, duint size, ENCODETYPE type);
|
||||
typedef BPXTYPE(*DBGBPGETTYPEAT)(duint addr);
|
||||
typedef bool (*DBGGETREGDUMP)(REGDUMP* regdump, size_t size);
|
||||
typedef bool (*DBGGETREGDUMP)(REGDUMP* regdump);
|
||||
typedef bool (*DBGVALTOSTRING)(const char* string, duint value);
|
||||
typedef bool (*DBGMEMISVALIDREADPTR)(duint addr);
|
||||
typedef int (*DBGGETBPLIST)(BPXTYPE type, BPMAP* bplist);
|
||||
|
|
|
@ -463,14 +463,39 @@ BRIDGE_IMPEXP duint DbgValFromString(const char* string)
|
|||
return value;
|
||||
}
|
||||
|
||||
BRIDGE_IMPEXP bool DbgGetRegDump(REGDUMP* regdump)
|
||||
//deprecated api, only provided for binary compatibility
|
||||
extern "C" __declspec(dllexport) bool DbgGetRegDump(REGDUMP* regdump)
|
||||
{
|
||||
return _dbg_getregdump(regdump, sizeof(REGDUMP));
|
||||
typedef struct
|
||||
{
|
||||
REGISTERCONTEXT regcontext;
|
||||
FLAGS flags;
|
||||
X87FPUREGISTER x87FPURegisters[8];
|
||||
unsigned long long mmx[8];
|
||||
MXCSRFIELDS MxCsrFields;
|
||||
X87STATUSWORDFIELDS x87StatusWordFields;
|
||||
X87CONTROLWORDFIELDS x87ControlWordFields;
|
||||
LASTERROR lastError;
|
||||
} REGDUMP_OLD;
|
||||
return DbgGetRegDumpEx(regdump, sizeof(REGDUMP_OLD));
|
||||
}
|
||||
|
||||
BRIDGE_IMPEXP bool DbgGetRegDumpEx(REGDUMP* regdump, size_t size)
|
||||
{
|
||||
return _dbg_getregdump(regdump, size);
|
||||
if(size == sizeof(REGDUMP))
|
||||
return _dbg_getregdump(regdump);
|
||||
|
||||
if(size > sizeof(REGDUMP))
|
||||
__debugbreak();
|
||||
|
||||
REGDUMP temp;
|
||||
if(!_dbg_getregdump(&temp))
|
||||
{
|
||||
memset(regdump, 0, size);
|
||||
return false;
|
||||
}
|
||||
memcpy(regdump, &temp, size);
|
||||
return true;
|
||||
}
|
||||
|
||||
// FIXME all
|
||||
|
|
|
@ -761,18 +761,6 @@ typedef struct
|
|||
char name[128];
|
||||
} LASTSTATUS;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
REGISTERCONTEXT regcontext;
|
||||
FLAGS flags;
|
||||
X87FPUREGISTER x87FPURegisters[8];
|
||||
unsigned long long mmx[8];
|
||||
MXCSRFIELDS MxCsrFields;
|
||||
X87STATUSWORDFIELDS x87StatusWordFields;
|
||||
X87CONTROLWORDFIELDS x87ControlWordFields;
|
||||
LASTERROR lastError;
|
||||
} REGDUMP;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
REGISTERCONTEXT regcontext;
|
||||
|
@ -784,7 +772,7 @@ typedef struct
|
|||
X87CONTROLWORDFIELDS x87ControlWordFields;
|
||||
LASTERROR lastError;
|
||||
LASTSTATUS lastStatus;
|
||||
} REGDUMP_V2;
|
||||
} REGDUMP;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
|
@ -944,7 +932,6 @@ BRIDGE_IMPEXP void DbgClearBookmarkRange(duint start, duint end);
|
|||
BRIDGE_IMPEXP bool DbgGetModuleAt(duint addr, char* text);
|
||||
BRIDGE_IMPEXP BPXTYPE DbgGetBpxTypeAt(duint addr);
|
||||
BRIDGE_IMPEXP duint DbgValFromString(const char* string);
|
||||
BRIDGE_IMPEXP bool DbgGetRegDump(REGDUMP* regdump);
|
||||
BRIDGE_IMPEXP bool DbgGetRegDumpEx(REGDUMP* regdump, size_t size);
|
||||
BRIDGE_IMPEXP bool DbgValToString(const char* string, duint value);
|
||||
BRIDGE_IMPEXP bool DbgMemIsValidReadPtr(duint addr);
|
||||
|
|
|
@ -257,7 +257,7 @@ void TraceRecordManager::TraceExecuteRecord(const Capstone & newInstruction)
|
|||
duint newMemoryAddress[32];
|
||||
duint oldMemory[32];
|
||||
unsigned char newMemoryArrayCount = 0;
|
||||
DbgGetRegDump(&newContext.registers);
|
||||
DbgGetRegDumpEx(&newContext.registers, sizeof(REGDUMP));
|
||||
newThreadId = ThreadGetId(hActiveThread);
|
||||
// Don't try to resolve memory values for lea and nop instructions
|
||||
if(!(newInstruction.IsNop() || newInstruction.GetId() == X86_INS_LEA))
|
||||
|
@ -541,13 +541,12 @@ bool TraceRecordManager::enableRunTrace(bool enabled, const char* fileName)
|
|||
for(size_t i = 0; i < _countof(rtOldContextChanged); i++)
|
||||
rtOldContextChanged[i] = true;
|
||||
dprintf(QT_TRANSLATE_NOOP("DBG", "Run trace started. File: %s\r\n"), fileName);
|
||||
REGDUMP cip;
|
||||
Capstone cp;
|
||||
unsigned char instr[MAX_DISASM_BUFFER];
|
||||
DbgGetRegDump(&cip);
|
||||
if(MemRead(cip.regcontext.cip, instr, MAX_DISASM_BUFFER))
|
||||
auto cip = GetContextDataEx(hActiveThread, UE_CIP);
|
||||
if(MemRead(cip, instr, MAX_DISASM_BUFFER))
|
||||
{
|
||||
cp.DisassembleSafe(cip.regcontext.cip, instr, MAX_DISASM_BUFFER);
|
||||
cp.DisassembleSafe(cip, instr, MAX_DISASM_BUFFER);
|
||||
TraceExecuteRecord(cp);
|
||||
}
|
||||
GuiOpenTraceFile(fileName);
|
||||
|
|
|
@ -627,14 +627,11 @@ static void TranslateTitanFpuRegisters(const x87FPURegister_t titanFpu[8], X87FP
|
|||
TranslateTitanFpuRegister(&titanFpu[i], &fpu[i]);
|
||||
}
|
||||
|
||||
extern "C" DLL_EXPORT bool _dbg_getregdump(REGDUMP* regdump, size_t size)
|
||||
extern "C" DLL_EXPORT bool _dbg_getregdump(REGDUMP* regdump)
|
||||
{
|
||||
if(size != sizeof(REGDUMP) && size != sizeof(REGDUMP_V2))
|
||||
return false;
|
||||
|
||||
if(!DbgIsDebugging())
|
||||
{
|
||||
memset(regdump, 0, size);
|
||||
memset(regdump, 0, sizeof(REGDUMP));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -661,21 +658,18 @@ extern "C" DLL_EXPORT bool _dbg_getregdump(REGDUMP* regdump, size_t size)
|
|||
GetMxCsrFields(& (regdump->MxCsrFields), regdump->regcontext.MxCsr);
|
||||
Getx87ControlWordFields(& (regdump->x87ControlWordFields), regdump->regcontext.x87fpu.ControlWord);
|
||||
Getx87StatusWordFields(& (regdump->x87StatusWordFields), regdump->regcontext.x87fpu.StatusWord);
|
||||
|
||||
LASTERROR lastError;
|
||||
memset(&lastError.name, 0, sizeof(lastError.name));
|
||||
lastError.code = ThreadGetLastError(ThreadGetId(hActiveThread));
|
||||
strncpy_s(lastError.name, ErrorCodeToName(lastError.code).c_str(), _TRUNCATE);
|
||||
regdump->lastError = lastError;
|
||||
|
||||
if(size >= sizeof(REGDUMP_V2))
|
||||
{
|
||||
REGDUMP_V2* regdumpV2 = (REGDUMP_V2*)regdump;
|
||||
LASTSTATUS lastStatus;
|
||||
memset(&lastStatus.name, 0, sizeof(lastStatus.name));
|
||||
lastStatus.code = ThreadGetLastStatus(ThreadGetId(hActiveThread));
|
||||
strncpy_s(lastStatus.name, NtStatusCodeToName(lastStatus.code).c_str(), _TRUNCATE);
|
||||
regdumpV2->lastStatus = lastStatus;
|
||||
}
|
||||
LASTSTATUS lastStatus;
|
||||
memset(&lastStatus.name, 0, sizeof(lastStatus.name));
|
||||
lastStatus.code = ThreadGetLastStatus(ThreadGetId(hActiveThread));
|
||||
strncpy_s(lastStatus.name, NtStatusCodeToName(lastStatus.code).c_str(), _TRUNCATE);
|
||||
regdump->lastStatus = lastStatus;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -20,7 +20,7 @@ DLL_EXPORT bool _dbg_addrinfoget(duint addr, SEGMENTREG segment, BRIDGE_ADDRINFO
|
|||
DLL_EXPORT bool _dbg_addrinfoset(duint addr, BRIDGE_ADDRINFO* addrinfo);
|
||||
DLL_EXPORT bool _dbg_encodetypeset(duint addr, duint size, ENCODETYPE type);
|
||||
DLL_EXPORT int _dbg_bpgettypeat(duint addr);
|
||||
DLL_EXPORT bool _dbg_getregdump(REGDUMP* regdump, size_t size);
|
||||
DLL_EXPORT bool _dbg_getregdump(REGDUMP* regdump);
|
||||
DLL_EXPORT bool _dbg_valtostring(const char* string, duint value);
|
||||
DLL_EXPORT int _dbg_getbplist(BPXTYPE type, BPMAP* list);
|
||||
DLL_EXPORT duint _dbg_getbranchdestination(duint addr);
|
||||
|
|
|
@ -101,8 +101,7 @@ void CPUSideBar::reload()
|
|||
void CPUSideBar::changeTopmostAddress(dsint i)
|
||||
{
|
||||
topVA = i;
|
||||
memset(®Dump, 0, sizeof(REGDUMP));
|
||||
DbgGetRegDump(®Dump);
|
||||
DbgGetRegDumpEx(®Dump, sizeof(REGDUMP));
|
||||
reload();
|
||||
}
|
||||
|
||||
|
|
|
@ -176,8 +176,7 @@ void LocalVarsView::updateSlot()
|
|||
return;
|
||||
}
|
||||
REGDUMP z;
|
||||
memset(&z, 0, sizeof(REGDUMP));
|
||||
DbgGetRegDump(&z);
|
||||
DbgGetRegDumpEx(&z, sizeof(REGDUMP));
|
||||
duint start, end;
|
||||
|
||||
if(DbgFunctionGet(z.regcontext.cip, &start, &end))
|
||||
|
|
|
@ -1315,8 +1315,8 @@ RegistersView::RegistersView(CPUWidget* parent) : QScrollArea(parent), mVScrollO
|
|||
|
||||
InitMappings();
|
||||
|
||||
memset(&wRegDumpStruct, 0, sizeof(REGDUMP_V2));
|
||||
memset(&wCipRegDumpStruct, 0, sizeof(REGDUMP_V2));
|
||||
memset(&wRegDumpStruct, 0, sizeof(REGDUMP));
|
||||
memset(&wCipRegDumpStruct, 0, sizeof(REGDUMP));
|
||||
mCip = 0;
|
||||
mRegisterUpdates.clear();
|
||||
|
||||
|
@ -2503,9 +2503,8 @@ void RegistersView::drawRegister(QPainter* p, REGISTER_NAME reg, char* value)
|
|||
void RegistersView::updateRegistersSlot()
|
||||
{
|
||||
// read registers
|
||||
REGDUMP_V2 z;
|
||||
memset(&z, 0, sizeof(REGDUMP_V2));
|
||||
DbgGetRegDumpEx((REGDUMP*)&z, sizeof(REGDUMP_V2));
|
||||
REGDUMP z;
|
||||
DbgGetRegDumpEx(&z, sizeof(REGDUMP));
|
||||
// update gui
|
||||
setRegisters(&z);
|
||||
}
|
||||
|
@ -3332,7 +3331,7 @@ SIZE_T RegistersView::GetSizeRegister(const REGISTER_NAME reg_name)
|
|||
return size;
|
||||
}
|
||||
|
||||
int RegistersView::CompareRegisters(const REGISTER_NAME reg_name, REGDUMP_V2* regdump1, REGDUMP_V2* regdump2)
|
||||
int RegistersView::CompareRegisters(const REGISTER_NAME reg_name, REGDUMP* regdump1, REGDUMP* regdump2)
|
||||
{
|
||||
SIZE_T size = GetSizeRegister(reg_name);
|
||||
char* reg1_data = registerValue(regdump1, reg_name);
|
||||
|
@ -3344,7 +3343,7 @@ int RegistersView::CompareRegisters(const REGISTER_NAME reg_name, REGDUMP_V2* re
|
|||
return -1;
|
||||
}
|
||||
|
||||
char* RegistersView::registerValue(const REGDUMP_V2* regd, const REGISTER_NAME reg)
|
||||
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
|
||||
|
@ -3659,7 +3658,7 @@ char* RegistersView::registerValue(const REGDUMP_V2* regd, const REGISTER_NAME r
|
|||
return (char*) &null_value;
|
||||
}
|
||||
|
||||
void RegistersView::setRegisters(REGDUMP_V2* reg)
|
||||
void RegistersView::setRegisters(REGDUMP* reg)
|
||||
{
|
||||
// tests if new-register-value == old-register-value holds
|
||||
if(mCip != reg->regcontext.cip) //CIP changed
|
||||
|
|
|
@ -139,8 +139,8 @@ protected:
|
|||
|
||||
// use-in-class-only methods
|
||||
void drawRegister(QPainter* p, REGISTER_NAME reg, char* value);
|
||||
void setRegisters(REGDUMP_V2* reg);
|
||||
char* registerValue(const REGDUMP_V2* regd, const REGISTER_NAME reg);
|
||||
void setRegisters(REGDUMP* reg);
|
||||
char* registerValue(const REGDUMP* regd, const REGISTER_NAME reg);
|
||||
bool identifyRegister(const int y, const int x, REGISTER_NAME* clickedReg);
|
||||
QString helpRegister(REGISTER_NAME reg);
|
||||
void CreateDumpNMenu(QMenu* dumpMenu);
|
||||
|
@ -187,7 +187,7 @@ protected slots:
|
|||
void onSIMDHQWord();
|
||||
void onClose();
|
||||
QString getRegisterLabel(REGISTER_NAME);
|
||||
int CompareRegisters(const REGISTER_NAME reg_name, REGDUMP_V2* regdump1, REGDUMP_V2* regdump2);
|
||||
int CompareRegisters(const REGISTER_NAME reg_name, REGDUMP* regdump1, REGDUMP* regdump2);
|
||||
SIZE_T GetSizeRegister(const REGISTER_NAME reg_name);
|
||||
QString GetRegStringValueFromValue(REGISTER_NAME reg, const char* value);
|
||||
QString GetTagWordStateString(unsigned short);
|
||||
|
@ -247,8 +247,8 @@ private:
|
|||
// contains viewport positions
|
||||
QMap<REGISTER_NAME, Register_Position> mRegisterPlaces;
|
||||
// contains a dump of the current register values
|
||||
REGDUMP_V2 wRegDumpStruct;
|
||||
REGDUMP_V2 wCipRegDumpStruct;
|
||||
REGDUMP wRegDumpStruct;
|
||||
REGDUMP wCipRegDumpStruct;
|
||||
// font measures (TODO: create a class that calculates all thos values)
|
||||
unsigned int mRowHeight, mCharWidth;
|
||||
// SIMD registers display mode
|
||||
|
|
|
@ -345,7 +345,7 @@ static bool readBlock(QFile & traceFile)
|
|||
if(traceFile.seek(traceFile.pos() + skipOffset * sizeof(duint)) == false)
|
||||
throw std::wstring(L"Unspecified");
|
||||
//Gathered information, build index
|
||||
if(changedCountFlags[0] == (sizeof(REGDUMP) - 128) / sizeof(duint))
|
||||
if(changedCountFlags[0] == (FIELD_OFFSET(REGDUMP, lastError) + sizeof(DWORD)) / sizeof(duint))
|
||||
return true;
|
||||
else
|
||||
return false;
|
||||
|
@ -464,7 +464,7 @@ TraceFilePage::TraceFilePage(TraceFileReader* parent, unsigned long long fileOff
|
|||
union
|
||||
{
|
||||
REGDUMP registers;
|
||||
duint regwords[(sizeof(REGDUMP) - 128) / sizeof(duint)];
|
||||
duint regwords[(FIELD_OFFSET(REGDUMP, lastError) + sizeof(DWORD)) / sizeof(duint)];
|
||||
};
|
||||
unsigned char changed[_countof(regwords)];
|
||||
duint regContent[_countof(regwords)];
|
||||
|
|
Loading…
Reference in New Issue