Add DbgGetRegDumpEx to bridge API
Public SDK changes: - Add LASTSTATUS struct - Add REGDUMP_V2 struct with LASTSTATUS member - Add DbgGetRegDumpEx(REGDUMP* regdump, size_t size); Internal changes: - Change typedef of _dbg_getregdump to add a size parameter - Make DbgGetRegDump() pass sizeof(REGDUMP) to _dbg_getregdump to preserve existing behaviour. DbgGetRegDumpEx() forwards the size that was passed to it
This commit is contained in:
parent
0fbb1aa056
commit
787b86cd1f
|
|
@ -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);
|
||||
typedef bool (*DBGGETREGDUMP)(REGDUMP* regdump, size_t size);
|
||||
typedef bool (*DBGVALTOSTRING)(const char* string, duint value);
|
||||
typedef bool (*DBGMEMISVALIDREADPTR)(duint addr);
|
||||
typedef int (*DBGGETBPLIST)(BPXTYPE type, BPMAP* bplist);
|
||||
|
|
|
|||
|
|
@ -465,7 +465,12 @@ BRIDGE_IMPEXP duint DbgValFromString(const char* string)
|
|||
|
||||
BRIDGE_IMPEXP bool DbgGetRegDump(REGDUMP* regdump)
|
||||
{
|
||||
return _dbg_getregdump(regdump);
|
||||
return _dbg_getregdump(regdump, sizeof(REGDUMP));
|
||||
}
|
||||
|
||||
BRIDGE_IMPEXP bool DbgGetRegDumpEx(REGDUMP* regdump, size_t size)
|
||||
{
|
||||
return _dbg_getregdump(regdump, size);
|
||||
}
|
||||
|
||||
// FIXME all
|
||||
|
|
|
|||
|
|
@ -755,6 +755,12 @@ typedef struct
|
|||
char name[128];
|
||||
} LASTERROR;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
DWORD code;
|
||||
char name[128];
|
||||
} LASTSTATUS;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
REGISTERCONTEXT regcontext;
|
||||
|
|
@ -767,6 +773,19 @@ typedef struct
|
|||
LASTERROR lastError;
|
||||
} REGDUMP;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
REGISTERCONTEXT regcontext;
|
||||
FLAGS flags;
|
||||
X87FPUREGISTER x87FPURegisters[8];
|
||||
unsigned long long mmx[8];
|
||||
MXCSRFIELDS MxCsrFields;
|
||||
X87STATUSWORDFIELDS x87StatusWordFields;
|
||||
X87CONTROLWORDFIELDS x87ControlWordFields;
|
||||
LASTERROR lastError;
|
||||
LASTSTATUS lastStatus;
|
||||
} REGDUMP_V2;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
DISASM_ARGTYPE type; //normal/memory
|
||||
|
|
@ -926,6 +945,7 @@ 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);
|
||||
BRIDGE_IMPEXP int DbgGetBpList(BPXTYPE type, BPMAP* list);
|
||||
|
|
|
|||
|
|
@ -627,11 +627,14 @@ static void TranslateTitanFpuRegisters(const x87FPURegister_t titanFpu[8], X87FP
|
|||
TranslateTitanFpuRegister(&titanFpu[i], &fpu[i]);
|
||||
}
|
||||
|
||||
extern "C" DLL_EXPORT bool _dbg_getregdump(REGDUMP* regdump)
|
||||
extern "C" DLL_EXPORT bool _dbg_getregdump(REGDUMP* regdump, size_t size)
|
||||
{
|
||||
if(size != sizeof(REGDUMP) && size != sizeof(REGDUMP_V2))
|
||||
return false;
|
||||
|
||||
if(!DbgIsDebugging())
|
||||
{
|
||||
memset(regdump, 0, sizeof(REGDUMP));
|
||||
memset(regdump, 0, size);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
@ -664,6 +667,12 @@ extern "C" DLL_EXPORT bool _dbg_getregdump(REGDUMP* regdump)
|
|||
strncpy_s(lastError.name, ErrorCodeToName(lastError.code).c_str(), _TRUNCATE);
|
||||
regdump->lastError = lastError;
|
||||
|
||||
if(size >= sizeof(REGDUMP_V2))
|
||||
{
|
||||
REGDUMP_V2* regdumpV2 = (REGDUMP_V2*)regdump;
|
||||
// TODO: retrieve name of 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);
|
||||
DLL_EXPORT bool _dbg_getregdump(REGDUMP* regdump, size_t size);
|
||||
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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue