1
0
Fork 0

DBG: small code improvements

This commit is contained in:
Mr. eXoDia 2014-02-23 20:13:03 +01:00
parent f504f0150a
commit 93e5e0489e
7 changed files with 141 additions and 138 deletions

View File

@ -669,51 +669,51 @@ BRIDGE_IMPEXP void GuiSymbolUpdateModuleList(int count, SYMBOLMODULEINFO* module
BRIDGE_IMPEXP void GuiReferenceAddColumn(int width, const char* title)
{
_gui_sendmessage(GUI_REF_ADDCOLUMN, (void*)(duint)width, (void*)title);
_gui_sendmessage(GUI_REF_ADDCOLUMN, (void*)(duint)width, (void*)title);
}
BRIDGE_IMPEXP void GuiReferenceSetRowCount(int count)
{
_gui_sendmessage(GUI_REF_SETROWCOUNT, (void*)(duint)count, 0);
_gui_sendmessage(GUI_REF_SETROWCOUNT, (void*)(duint)count, 0);
}
BRIDGE_IMPEXP int GuiReferenceGetRowCount()
{
return (int)(duint)_gui_sendmessage(GUI_REF_GETROWCOUNT, 0, 0);
return (int)(duint)_gui_sendmessage(GUI_REF_GETROWCOUNT, 0, 0);
}
BRIDGE_IMPEXP void GuiReferenceDeleteAllColumns()
{
_gui_sendmessage(GUI_REF_DELETEALLCOLUMNS, 0, 0);
_gui_sendmessage(GUI_REF_DELETEALLCOLUMNS, 0, 0);
}
BRIDGE_IMPEXP void GuiReferenceSetCellContent(int row, int col, const char* str)
{
CELLINFO info;
info.row=row;
info.col=col;
info.str=str;
_gui_sendmessage(GUI_REF_SETCELLCONTENT, &info, 0);
CELLINFO info;
info.row=row;
info.col=col;
info.str=str;
_gui_sendmessage(GUI_REF_SETCELLCONTENT, &info, 0);
}
BRIDGE_IMPEXP const char* GuiReferenceGetCellContent(int row, int col)
{
return (const char*)_gui_sendmessage(GUI_REF_GETCELLCONTENT, (void*)(duint)row, (void*)(duint)col);
return (const char*)_gui_sendmessage(GUI_REF_GETCELLCONTENT, (void*)(duint)row, (void*)(duint)col);
}
BRIDGE_IMPEXP void GuiReferenceReloadData()
{
_gui_sendmessage(GUI_REF_RELOADDATA, 0, 0);
_gui_sendmessage(GUI_REF_RELOADDATA, 0, 0);
}
BRIDGE_IMPEXP void GuiReferenceSetSingleSelection(int index, bool scroll)
{
_gui_sendmessage(GUI_REF_SETSINGLESELECTION, (void*)(duint)index, (void*)(duint)scroll);
_gui_sendmessage(GUI_REF_SETSINGLESELECTION, (void*)(duint)index, (void*)(duint)scroll);
}
BRIDGE_IMPEXP void GuiReferenceSetProgress(int progress)
{
_gui_sendmessage(GUI_REF_SETPROGRESS, (void*)(duint)progress, 0);
_gui_sendmessage(GUI_REF_SETPROGRESS, (void*)(duint)progress, 0);
}
//Main

View File

@ -330,7 +330,7 @@ enum GUIMSG
GUI_REF_GETCELLCONTENT, // param1=int row, param2=int col
GUI_REF_RELOADDATA, // param1=unused, param2=unused
GUI_REF_SETSINGLESELECTION, // param1=int index, param2=bool scroll
GUI_REF_SETPROGRESS // param1=int progress, param2=unused
GUI_REF_SETPROGRESS // param1=int progress, param2=unused
};
//GUI structures

View File

@ -1285,6 +1285,7 @@ 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)
@ -1432,15 +1433,16 @@ CMDRESULT cbDebugFree(int argc, char* argv[])
CMDRESULT cbDebugMemset(int argc, char* argv[])
{
char arg1[deflen]=""; //addr
char arg2[deflen]=""; //value
char arg3[deflen]=""; //size
uint addr;
uint value;
uint size;
if(!argget(*argv, arg1, 0, false) or !argget(*argv, arg2, 1, false))
if(argc<3)
{
dputs("not enough arguments");
return STATUS_ERROR;
if(!valfromstring(arg1, &addr, false) or !valfromstring(arg2, &value, false))
}
if(!valfromstring(argv[1], &addr, false) or !valfromstring(argv[2], &value, false))
return STATUS_ERROR;
if(argget(*argv, arg3, 2, true))
{
@ -1469,11 +1471,13 @@ CMDRESULT cbDebugMemset(int argc, char* argv[])
CMDRESULT cbBenchmark(int argc, char* argv[])
{
char arg1[deflen]="";
if(!argget(*argv, arg1, 0, false))
if(argc<2)
{
dputs("not enough arguments");
return STATUS_ERROR;
}
uint addr=0;
if(!valfromstring(arg1, &addr, false))
if(!valfromstring(argv[1], &addr, false))
return STATUS_ERROR;
uint ticks=GetTickCount();
for(int i=0; i<10000; i++)
@ -1499,11 +1503,13 @@ CMDRESULT cbDebugPause(int argc, char* argv[])
CMDRESULT cbMemWrite(int argc, char* argv[])
{
char arg1[deflen]="";
if(!argget(*argv, arg1, 0, false))
if(argc<2)
{
dputs("not enough arguments");
return STATUS_ERROR;
}
uint addr=0;
if(!valfromstring(arg1, &addr, false))
if(!valfromstring(argv[1], &addr, false))
return STATUS_ERROR;
unsigned char* blub=(unsigned char*)emalloc(0x2123, "cbMemWrite:blub");
memread(fdProcessInfo->hProcess, (const void*)addr, blub, 0x2123, 0);

View File

@ -71,7 +71,7 @@ static bool HandleArgument(ARGTYPE* Argument, INSTRTYPE* Instruction, DISASM_ARG
arg->constant=value;
arg->value=0;
if(!valfromstring(argmnemonic, &value, true, true))
return false;
return false;
if(DbgMemIsValidReadPtr(value))
{
arg->value=value;
@ -98,7 +98,7 @@ static bool HandleArgument(ARGTYPE* Argument, INSTRTYPE* Instruction, DISASM_ARG
arg->type=arg_normal;
uint value=0;
if(!valfromstring(argmnemonic, &value, true, true))
return false;
return false;
arg->value=value;
char sValue[64]="";
sprintf(sValue, "%"fext"X", value);
@ -111,12 +111,12 @@ static bool HandleArgument(ARGTYPE* Argument, INSTRTYPE* Instruction, DISASM_ARG
void disasmget(unsigned char* buffer, uint addr, DISASM_INSTR* instr)
{
if(!DbgIsDebugging() or !instr)
if(!DbgIsDebugging() or !instr)
return;
memset(instr, 0, sizeof(DISASM_INSTR));
memset(instr, 0, sizeof(DISASM_INSTR));
DISASM disasm;
memset(&disasm, 0, sizeof(DISASM));
disasm.Options=NoformatNumeral;
disasm.Options=NoformatNumeral;
#ifdef _WIN64
disasm.Archi=64;
#endif // _WIN64
@ -126,12 +126,12 @@ void disasmget(unsigned char* buffer, uint addr, DISASM_INSTR* instr)
strcpy(instr->instruction, disasm.CompleteInstr);
if(len==UNKNOWN_OPCODE)
{
instr->instr_size=1;
instr->instr_size=1;
instr->type=instr_normal;
instr->argcount=0;
return;
}
instr->instr_size=len;
instr->instr_size=len;
if(disasm.Instruction.BranchType)
instr->type=instr_branch;
else if(strstr(disasm.CompleteInstr, "sp") or strstr(disasm.CompleteInstr, "bp"))
@ -152,7 +152,7 @@ void disasmget(uint addr, DISASM_INSTR* instr)
return;
unsigned char buffer[16]="";
DbgMemRead(addr, buffer, 16);
disasmget(buffer, addr, instr);
disasmget(buffer, addr, instr);
}
void disasmprint(uint addr)

View File

@ -41,7 +41,7 @@ struct DISASM_INSTR
char instruction[64];
DISASM_INSTRTYPE type;
int argcount;
int instr_size;
int instr_size;
DISASM_ARG arg[3];
};

View File

@ -70,18 +70,20 @@ CMDRESULT cbBadCmd(int argc, char* argv[])
CMDRESULT cbInstrVar(int argc, char* argv[])
{
char arg1[deflen]="";
char arg2[deflen]="";
if(!argget(*argv, arg1, 0, false)) //var name
if(argc<2)
{
dputs("not enough arguments!");
return STATUS_ERROR;
}
char arg2[deflen]="";
argget(*argv, arg2, 1, true); //var value (optional)
uint value=0;
int add=0;
if(*arg1=='$')
if(*argv[1]=='$')
add++;
if(valfromstring(arg1+add, &value))
if(valfromstring(argv[1]+add, &value))
{
dprintf("invalid variable name \"%s\"\n", arg1);
dprintf("invalid variable name \"%s\"\n", argv[1]);
return STATUS_ERROR;
}
if(!valfromstring(arg2, &value))
@ -89,57 +91,60 @@ CMDRESULT cbInstrVar(int argc, char* argv[])
dprintf("invalid value \"%s\"\n", arg2);
return STATUS_ERROR;
}
if(!varnew(arg1, value, VAR_USER))
if(!varnew(argv[1], value, VAR_USER))
{
dprintf("error creating variable \"%s\"\n", arg1);
dprintf("error creating variable \"%s\"\n", argv[1]);
return STATUS_ERROR;
}
else
{
if(value>15)
dprintf("%s=%"fext"X (%"fext"ud)\n", arg1, value, value);
dprintf("%s=%"fext"X (%"fext"ud)\n", argv[1], value, value);
else
dprintf("%s=%"fext"X\n", arg1, value);
dprintf("%s=%"fext"X\n", argv[1], value);
}
return STATUS_CONTINUE;
}
CMDRESULT cbInstrVarDel(int argc, char* argv[])
{
char arg1[deflen]="";
if(!argget(*argv, arg1, 0, false)) //var name
if(argc<2)
{
dputs("not enough arguments!");
return STATUS_ERROR;
if(!vardel(arg1, false))
dprintf("could not delete variable \"%s\"\n", arg1);
}
if(!vardel(argv[1], false))
dprintf("could not delete variable \"%s\"\n", argv[1]);
else
dprintf("deleted variable \"%s\"\n", arg1);
dprintf("deleted variable \"%s\"\n", argv[1]);
return STATUS_CONTINUE;
}
CMDRESULT cbInstrMov(int argc, char* argv[])
{
char arg1[deflen]="";
char arg2[deflen]="";
if(!argget(*argv, arg1, 0, false)) //dest name
return STATUS_ERROR;
if(!argget(*argv, arg2, 1, false)) //src name
return STATUS_ERROR;
uint set_value=0;
if(!valfromstring(arg2, &set_value))
if(argc<3)
{
dprintf("invalid src \"%s\"\n", arg2);
dputs("not enough arguments");
return STATUS_ERROR;
}
uint set_value=0;
if(!valfromstring(argv[2], &set_value))
{
dprintf("invalid src \"%s\"\n", argv[2]);
return STATUS_ERROR;
}
bool isvar=false;
if(!isvar or !valtostring(arg1, &set_value, true))
uint temp=0;
valfromstring(argv[1], &temp, true, false, 0, &isvar, 0);
if(!isvar or !valtostring(argv[1], &set_value, true))
{
uint value;
if(valfromstring(arg1, &value))
if(!valfromstring(argv[1], &value))
{
dprintf("invalid dest \"%s\"\n", arg1);
dprintf("invalid dest \"%s\"\n", argv[1]);
return STATUS_ERROR;
}
varnew(arg1, set_value, VAR_USER);
varnew(argv[1], set_value, VAR_USER);
}
cbBadCmd(1, &argv[1]);
return STATUS_CONTINUE;
@ -202,34 +207,32 @@ CMDRESULT cbInstrVarList(int argc, char* argv[])
CMDRESULT cbInstrChd(int argc, char* argv[])
{
char arg1[deflen]="";
if(!argget(*argv, arg1, 0, false))
if(argc<2)
{
dputs("not enough arguments!");
return STATUS_ERROR;
if(!DirExists(arg1))
}
if(!DirExists(argv[1]))
{
dputs("directory doesn't exist");
return STATUS_ERROR;
}
SetCurrentDirectoryA(arg1);
SetCurrentDirectoryA(argv[1]);
dputs("current directory changed!");
return STATUS_CONTINUE;
}
CMDRESULT cbInstrCmt(int argc, char* argv[])
{
char arg1[deflen]="";
if(!argget(*argv, arg1, 0, false))
return STATUS_ERROR;
uint addr=0;
if(!valfromstring(arg1, &addr))
if(argc<3)
{
dprintf("invalid address: \"%s\"\n", arg1);
dputs("not enough arguments!");
return STATUS_ERROR;
}
char arg2[deflen]="";
if(!argget(*argv, arg2, 1, false))
uint addr=0;
if(!valfromstring(argv[1], &addr, false))
return STATUS_ERROR;
if(!commentset(addr, arg2))
if(!commentset(addr, argv[2]))
{
dputs("error setting comment");
return STATUS_ERROR;
@ -239,15 +242,14 @@ CMDRESULT cbInstrCmt(int argc, char* argv[])
CMDRESULT cbInstrCmtdel(int argc, char* argv[])
{
char arg1[deflen]="";
if(!argget(*argv, arg1, 0, false))
return STATUS_ERROR;
uint addr=0;
if(!valfromstring(arg1, &addr))
if(argc<2)
{
dprintf("invalid address: \"%s\"\n", arg1);
dputs("not enough arguments!");
return STATUS_ERROR;
}
uint addr=0;
if(!valfromstring(argv[1], &addr, false))
return STATUS_ERROR;
if(!commentdel(addr))
{
dputs("error deleting comment");
@ -258,19 +260,15 @@ CMDRESULT cbInstrCmtdel(int argc, char* argv[])
CMDRESULT cbInstrLbl(int argc, char* argv[])
{
char arg1[deflen]="";
if(!argget(*argv, arg1, 0, false))
return STATUS_ERROR;
uint addr=0;
if(!valfromstring(arg1, &addr))
if(argc<3)
{
dprintf("invalid address: \"%s\"\n", arg1);
dputs("not enough arguments!");
return STATUS_ERROR;
}
char arg2[deflen]="";
if(!argget(*argv, arg2, 1, false))
uint addr=0;
if(!valfromstring(argv[1], &addr, false))
return STATUS_ERROR;
if(!labelset(addr, arg2))
if(!labelset(addr, argv[2]))
{
dputs("error setting label");
return STATUS_ERROR;
@ -280,16 +278,14 @@ CMDRESULT cbInstrLbl(int argc, char* argv[])
CMDRESULT cbInstrLbldel(int argc, char* argv[])
{
char arg1[deflen]="";
if(!argget(*argv, arg1, 0, false))
return STATUS_ERROR;
uint addr=0;
if(!valfromstring(arg1, &addr))
if(argc<2)
{
dprintf("invalid address: \"%s\"\n", arg1);
dputs("not enough arguments!");
return STATUS_ERROR;
}
uint addr=0;
if(!valfromstring(argv[1], &addr, false))
return STATUS_ERROR;
if(!labeldel(addr))
{
dputs("error deleting label");
@ -300,15 +296,14 @@ CMDRESULT cbInstrLbldel(int argc, char* argv[])
CMDRESULT cbInstrBookmarkSet(int argc, char* argv[])
{
char arg1[deflen]="";
if(!argget(*argv, arg1, 0, false))
return STATUS_ERROR;
uint addr=0;
if(!valfromstring(arg1, &addr))
if(argc<2)
{
dprintf("invalid address: \"%s\"\n", arg1);
dputs("not enough arguments!");
return STATUS_ERROR;
}
uint addr=0;
if(!valfromstring(argv[1], &addr, false))
return STATUS_ERROR;
if(!bookmarkset(addr))
{
dputs("failed to set bookmark!");
@ -320,15 +315,14 @@ CMDRESULT cbInstrBookmarkSet(int argc, char* argv[])
CMDRESULT cbInstrBookmarkDel(int argc, char* argv[])
{
char arg1[deflen]="";
if(!argget(*argv, arg1, 0, false))
return STATUS_ERROR;
uint addr=0;
if(!valfromstring(arg1, &addr))
if(argc<2)
{
dprintf("invalid address: \"%s\"\n", arg1);
dputs("not enough arguments!");
return STATUS_ERROR;
}
uint addr=0;
if(!valfromstring(argv[1], &addr, false))
return STATUS_ERROR;
if(!bookmarkdel(addr))
{
dputs("failed to delete bookmark!");
@ -706,33 +700,33 @@ CMDRESULT cbInstrXor(int argc, char* argv[])
CMDRESULT cbInstrRefinit(int argc, char* argv[])
{
GuiReferenceDeleteAllColumns();
GuiReferenceAddColumn(sizeof(uint)*2, "Address");
GuiReferenceAddColumn(0, "Data");
GuiReferenceSetRowCount(0);
GuiReferenceReloadData();
bRefinit=true;
return STATUS_CONTINUE;
GuiReferenceDeleteAllColumns();
GuiReferenceAddColumn(sizeof(uint)*2, "Address");
GuiReferenceAddColumn(0, "Data");
GuiReferenceSetRowCount(0);
GuiReferenceReloadData();
bRefinit=true;
return STATUS_CONTINUE;
}
CMDRESULT cbInstrRefadd(int argc, char* argv[])
{
if(argc<3)
{
dputs("not enough arguments!");
return STATUS_ERROR;
}
uint addr=0;
if(!valfromstring(argv[1], &addr, false))
return STATUS_ERROR;
if(!bRefinit)
cbInstrRefinit(argc, argv);
int index=GuiReferenceGetRowCount();
GuiReferenceSetRowCount(index+1);
char addr_text[deflen]="";
sprintf(addr_text, fhex, addr);
GuiReferenceSetCellContent(index, 0, addr_text);
GuiReferenceSetCellContent(index, 1, argv[2]);
GuiReferenceReloadData();
return STATUS_CONTINUE;
if(argc<3)
{
dputs("not enough arguments!");
return STATUS_ERROR;
}
uint addr=0;
if(!valfromstring(argv[1], &addr, false))
return STATUS_ERROR;
if(!bRefinit)
cbInstrRefinit(argc, argv);
int index=GuiReferenceGetRowCount();
GuiReferenceSetRowCount(index+1);
char addr_text[deflen]="";
sprintf(addr_text, fhex, addr);
GuiReferenceSetCellContent(index, 0, addr_text);
GuiReferenceSetCellContent(index, 1, argv[2]);
GuiReferenceReloadData();
return STATUS_CONTINUE;
}

View File

@ -20,9 +20,12 @@ static COMMAND* command_list=0;
static CMDRESULT cbStrLen(int argc, char* argv[])
{
char arg1[deflen]="";
if(argget(*argv, arg1, 0, false))
dprintf("\"%s\"[%d]\n", arg1, strlen(arg1));
if(argc<2)
{
dputs("not enough arguments!");
return STATUS_ERROR;
}
dprintf("\"%s\"[%d]\n", argv[1], strlen(argv[1]));
return STATUS_CONTINUE;
}
@ -140,8 +143,8 @@ static void registercommands()
cmdnew(cmd, "dump", cbDebugDump, true); //dump at address
cmdnew(cmd, "printf", cbPrintf, false); //printf
cmdnew(cmd, "refinit", cbInstrRefinit, false);
cmdnew(cmd, "refadd", cbInstrRefadd, false);
cmdnew(cmd, "refinit", cbInstrRefinit, false);
cmdnew(cmd, "refadd", cbInstrRefadd, false);
}
static bool cbCommandProvider(char* cmd, int maxlen)