1
0
Fork 0

PROJECT: updated readme

BRIDGE: added DbgDisasmAt function
This commit is contained in:
Mr. eXoDia 2014-02-24 13:00:47 +01:00
parent 93e5e0489e
commit f92a4091f5
6 changed files with 56 additions and 49 deletions

View File

@ -56,6 +56,8 @@ without having to update the code of the other parts.
- easily follow calls/jumps/ret (press ENTER in when selecting)
- (buggy) dynamic commenting
- scripting support (using the debugger commands)!
- simple dump
- symbols (+ exports) view with search
>Known bugs:
- memory breakpoints sometimes fail (TitanEngine bug)

View File

@ -544,6 +544,11 @@ BRIDGE_IMPEXP duint DbgModBaseFromName(const char* name)
return _dbg_sendmessage(DBG_MODBASE_FROM_NAME, (void*)name, 0);
}
BRIDGE_IMPEXP void DbgDisasmAt(duint addr, DISASM_INSTR* instr)
{
_dbg_sendmessage(DBG_DISASM_AT, (void*)addr, instr);
}
//GUI
BRIDGE_IMPEXP void GuiDisasmAt(duint addr, duint cip)
{

View File

@ -113,7 +113,8 @@ enum DBGMSG
DBG_SCRIPT_SETIP, // param1=int line, param2=unused
DBG_SYMBOL_ENUM, // param1=SYMBOLCBINFO* cbInfo, param2=unused
DBG_ASSEMBLE_AT, // param1=duint addr, param2=const char* instruction
DBG_MODBASE_FROM_NAME // param1=const char* modname, param2=unused
DBG_MODBASE_FROM_NAME, // param1=const char* modname, param2=unused
DBG_DISASM_AT // param1=duint addr, param2=DISASM_INSTR* instr
};
enum SCRIPTLINETYPE
@ -125,6 +126,26 @@ enum SCRIPTLINETYPE
lineempty,
};
enum DISASM_INSTRTYPE
{
instr_normal,
instr_branch,
instr_stack
};
enum DISASM_ARGTYPE
{
arg_normal,
arg_memory
};
enum STRING_TYPE
{
str_none,
str_ascii,
str_unicode
};
//Debugger typedefs
struct SYMBOLINFO;
@ -247,6 +268,26 @@ struct REGDUMP
duint dr7;
};
struct DISASM_ARG
{
DISASM_ARGTYPE type;
SEGMENTREG segment;
char mnemonic[64];
duint constant;
duint value;
duint memvalue;
};
struct DISASM_INSTR
{
char instruction[64];
DISASM_INSTRTYPE type;
int argcount;
int instr_size;
DISASM_ARG arg[3];
};
//Debugger functions
BRIDGE_IMPEXP const char* DbgInit();
BRIDGE_IMPEXP void DbgMemRead(duint va, unsigned char* dest, duint size);
@ -276,7 +317,6 @@ BRIDGE_IMPEXP LOOPTYPE DbgGetLoopTypeAt(duint addr, int depth);
BRIDGE_IMPEXP duint DbgGetBranchDestination(duint addr);
BRIDGE_IMPEXP bool DbgFunctionOverlaps(duint start, duint end);
BRIDGE_IMPEXP bool DbgFunctionGet(duint addr, duint* start, duint* end);
BRIDGE_IMPEXP void DbgScriptLoad(const char* filename);
BRIDGE_IMPEXP void DbgScriptUnload();
BRIDGE_IMPEXP void DbgScriptRun(int destline);
@ -287,10 +327,10 @@ BRIDGE_IMPEXP bool DbgScriptCmdExec(const char* command);
BRIDGE_IMPEXP void DbgScriptAbort();
BRIDGE_IMPEXP SCRIPTLINETYPE DbgScriptGetLineType(int line);
BRIDGE_IMPEXP void DbgScriptSetIp(int line);
BRIDGE_IMPEXP void DbgSymbolEnum(duint base, CBSYMBOLENUM cbSymbolEnum, void* user);
BRIDGE_IMPEXP bool DbgAssembleAt(duint addr, const char* instruction);
BRIDGE_IMPEXP duint DbgModBaseFromName(const char* name);
BRIDGE_IMPEXP void DbgDisasmAt(duint addr, DISASM_INSTR* instr);
//Gui enums
enum GUIMSG
@ -354,7 +394,6 @@ BRIDGE_IMPEXP void GuiUpdateWindowTitle(const char* filename);
BRIDGE_IMPEXP void GuiUpdateCPUTitle(const char* modname);
BRIDGE_IMPEXP HWND GuiGetWindowHandle();
BRIDGE_IMPEXP void GuiDumpAt(duint va);
BRIDGE_IMPEXP void GuiScriptAdd(int count, const char** lines);
BRIDGE_IMPEXP void GuiScriptClear();
BRIDGE_IMPEXP void GuiScriptSetIp(int line);
@ -363,12 +402,10 @@ BRIDGE_IMPEXP void GuiScriptSetTitle(const char* title);
BRIDGE_IMPEXP void GuiScriptSetInfoLine(int line, const char* info);
BRIDGE_IMPEXP void GuiScriptMessage(const char* message);
BRIDGE_IMPEXP int GuiScriptMsgyn(const char* message);
BRIDGE_IMPEXP void GuiSymbolLogAdd(const char* message);
BRIDGE_IMPEXP void GuiSymbolLogClear();
BRIDGE_IMPEXP void GuiSymbolSetProgress(int percent);
BRIDGE_IMPEXP void GuiSymbolUpdateModuleList(int count, SYMBOLMODULEINFO* modules);
BRIDGE_IMPEXP void GuiReferenceAddColumn(int width, const char* title);
BRIDGE_IMPEXP void GuiReferenceSetRowCount(int count);
BRIDGE_IMPEXP int GuiReferenceGetRowCount();

View File

@ -605,6 +605,12 @@ extern "C" DLL_EXPORT uint _dbg_sendmessage(DBGMSG type, void* param1, void* par
return modbasefromname((const char*)param1);
}
break;
case DBG_DISASM_AT:
{
disasmget((uint)param1, (DISASM_INSTR*)param2);
}
break;
}
return 0;
}

View File

@ -1285,7 +1285,6 @@ CMDRESULT cbDebugSetHardwareBreakpoint(int argc, char* argv[])
uint size=UE_HARDWARE_SIZE_1;
if(argget(*argv, arg3, 2, true))
{
if(!valfromstring(arg3, &size))
return STATUS_ERROR;
switch(size)

View File

@ -3,48 +3,6 @@
#include "_global.h"
//enums
enum DISASM_INSTRTYPE
{
instr_normal,
instr_branch,
instr_stack
};
enum DISASM_ARGTYPE
{
arg_normal,
arg_memory
};
enum STRING_TYPE
{
str_none,
str_ascii,
str_unicode
};
//structures
struct DISASM_ARG
{
DISASM_ARGTYPE type;
SEGMENTREG segment;
char mnemonic[64];
uint constant;
uint value;
uint memvalue;
};
struct DISASM_INSTR
{
char instruction[64];
DISASM_INSTRTYPE type;
int argcount;
int instr_size;
DISASM_ARG arg[3];
};
//functions
const char* disasmtext(uint addr);
void disasmprint(uint addr);