DBG: new tabbed reference view code
This commit is contained in:
parent
efe2f12219
commit
a134c11426
|
@ -848,6 +848,11 @@ BRIDGE_IMPEXP void GuiReferenceDeleteAllColumns()
|
|||
_gui_sendmessage(GUI_REF_DELETEALLCOLUMNS, 0, 0);
|
||||
}
|
||||
|
||||
BRIDGE_IMPEXP void GuiReferenceInitialize(const char* name)
|
||||
{
|
||||
_gui_sendmessage(GUI_REF_INITIALIZE, (void*)name, 0);
|
||||
}
|
||||
|
||||
BRIDGE_IMPEXP void GuiReferenceSetCellContent(int row, int col, const char* str)
|
||||
{
|
||||
CELLINFO info;
|
||||
|
|
|
@ -724,16 +724,16 @@ typedef enum
|
|||
GUI_GETLINE_WINDOW, // param1=const char* title, param2=char* text
|
||||
GUI_AUTOCOMPLETE_ADDCMD, // param1=const char* cmd, param2=ununsed
|
||||
GUI_AUTOCOMPLETE_DELCMD, // param1=const char* cmd, param2=ununsed
|
||||
GUI_AUTOCOMPLETE_CLEARALL, // param1=ununsed, param2=unused
|
||||
GUI_AUTOCOMPLETE_CLEARALL, // param1=unused, param2=unused
|
||||
GUI_SCRIPT_ENABLEHIGHLIGHTING, // param1=bool enable, param2=unused
|
||||
GUI_ADD_MSG_TO_STATUSBAR, // param1=const char* msg, param2=unused
|
||||
GUI_UPDATE_SIDEBAR, // param1=unused, param2=unused
|
||||
GUI_REPAINT_TABLE_VIEW, // param1=unused, param2=unused
|
||||
GUI_UPDATE_PATCHES, // param1=unused, param2=unused
|
||||
GUI_UPDATE_CALLSTACK, // param1=unused, param2=unused
|
||||
GUI_SYMBOL_REFRESH_CURRENT, // param1=unused, param2=unused
|
||||
GUI_UPDATE_MEMORY_VIEW // param1=unused, param2=unused
|
||||
|
||||
GUI_SYMBOL_REFRESH_CURRENT, // param1=unused, param2=unused
|
||||
GUI_UPDATE_MEMORY_VIEW, // param1=unused, param2=unused
|
||||
GUI_REF_INITIALIZE // param1=const char* name param2=unused
|
||||
} GUIMSG;
|
||||
|
||||
//GUI structures
|
||||
|
@ -780,6 +780,7 @@ BRIDGE_IMPEXP void GuiReferenceAddColumn(int width, const char* title);
|
|||
BRIDGE_IMPEXP void GuiReferenceSetRowCount(int count);
|
||||
BRIDGE_IMPEXP int GuiReferenceGetRowCount();
|
||||
BRIDGE_IMPEXP void GuiReferenceDeleteAllColumns();
|
||||
BRIDGE_IMPEXP void GuiReferenceInitialize(const char* name);
|
||||
BRIDGE_IMPEXP void GuiReferenceSetCellContent(int row, int col, const char* str);
|
||||
BRIDGE_IMPEXP const char* GuiReferenceGetCellContent(int row, int col);
|
||||
BRIDGE_IMPEXP void GuiReferenceReloadData();
|
||||
|
|
|
@ -760,7 +760,7 @@ CMDRESULT cbInstrXor(int argc, char* argv[])
|
|||
|
||||
CMDRESULT cbInstrRefinit(int argc, char* argv[])
|
||||
{
|
||||
GuiReferenceDeleteAllColumns();
|
||||
GuiReferenceInitialize("Script");
|
||||
GuiReferenceAddColumn(sizeof(uint) * 2, "Address");
|
||||
GuiReferenceAddColumn(0, "Data");
|
||||
GuiReferenceSetRowCount(0);
|
||||
|
@ -800,9 +800,9 @@ struct VALUERANGE
|
|||
//reffind value[,page]
|
||||
static bool cbRefFind(DISASM* disasm, BASIC_INSTRUCTION_INFO* basicinfo, REFINFO* refinfo)
|
||||
{
|
||||
if(!refinfo) //initialize
|
||||
if(!disasm && !basicinfo) //initialize
|
||||
{
|
||||
GuiReferenceDeleteAllColumns();
|
||||
GuiReferenceInitialize(refinfo->name);
|
||||
GuiReferenceAddColumn(2 * sizeof(uint), "Address");
|
||||
GuiReferenceAddColumn(0, "Disassembly");
|
||||
GuiReferenceReloadData();
|
||||
|
@ -880,7 +880,7 @@ CMDRESULT cbInstrRefFindRange(int argc, char* argv[])
|
|||
if(!valfromstring(argv[4], &size))
|
||||
size = 0;
|
||||
uint ticks = GetTickCount();
|
||||
int found = reffind(addr, size, cbRefFind, &range, false);
|
||||
int found = reffind(addr, size, cbRefFind, &range, false, "Constant");
|
||||
dprintf("%u reference(s) in %ums\n", found, GetTickCount() - ticks);
|
||||
varset("$result", found, false);
|
||||
return STATUS_CONTINUE;
|
||||
|
@ -889,9 +889,9 @@ CMDRESULT cbInstrRefFindRange(int argc, char* argv[])
|
|||
//refstr [page]
|
||||
bool cbRefStr(DISASM* disasm, BASIC_INSTRUCTION_INFO* basicinfo, REFINFO* refinfo)
|
||||
{
|
||||
if(!refinfo) //initialize
|
||||
if(!disasm && !basicinfo) //initialize
|
||||
{
|
||||
GuiReferenceDeleteAllColumns();
|
||||
GuiReferenceInitialize(refinfo->name);
|
||||
GuiReferenceAddColumn(2 * sizeof(uint), "Address");
|
||||
GuiReferenceAddColumn(64, "Disassembly");
|
||||
GuiReferenceAddColumn(500, "String");
|
||||
|
@ -945,7 +945,7 @@ CMDRESULT cbInstrRefStr(int argc, char* argv[])
|
|||
if(!valfromstring(argv[2], &size, true))
|
||||
size = 0;
|
||||
uint ticks = GetTickCount();
|
||||
int found = reffind(addr, size, cbRefStr, 0, false);
|
||||
int found = reffind(addr, size, cbRefStr, 0, false, "Strings");
|
||||
dprintf("%u string(s) in %ums\n", found, GetTickCount() - ticks);
|
||||
varset("$result", found, false);
|
||||
return STATUS_CONTINUE;
|
||||
|
@ -1160,7 +1160,7 @@ CMDRESULT cbInstrFindAll(int argc, char* argv[])
|
|||
else
|
||||
find_size = size - start;
|
||||
//setup reference view
|
||||
GuiReferenceDeleteAllColumns();
|
||||
GuiReferenceInitialize("Occurrences");
|
||||
GuiReferenceAddColumn(2 * sizeof(uint), "Address");
|
||||
if(findData)
|
||||
GuiReferenceAddColumn(0, "&Data&");
|
||||
|
@ -1209,9 +1209,9 @@ CMDRESULT cbInstrFindAll(int argc, char* argv[])
|
|||
//modcallfind [page]
|
||||
static bool cbModCallFind(DISASM* disasm, BASIC_INSTRUCTION_INFO* basicinfo, REFINFO* refinfo)
|
||||
{
|
||||
if(!refinfo) //initialize
|
||||
if(!disasm && !basicinfo) //initialize
|
||||
{
|
||||
GuiReferenceDeleteAllColumns();
|
||||
GuiReferenceInitialize(refinfo->name);
|
||||
GuiReferenceAddColumn(2 * sizeof(uint), "Address");
|
||||
GuiReferenceAddColumn(0, "Disassembly");
|
||||
GuiReferenceReloadData();
|
||||
|
@ -1249,7 +1249,7 @@ CMDRESULT cbInstrModCallFind(int argc, char* argv[])
|
|||
if(!valfromstring(argv[2], &size, true))
|
||||
size = 0;
|
||||
uint ticks = GetTickCount();
|
||||
int found = reffind(addr, size, cbModCallFind, 0, false);
|
||||
int found = reffind(addr, size, cbModCallFind, 0, false, "Calls");
|
||||
dprintf("%u call(s) in %ums\n", found, GetTickCount() - ticks);
|
||||
varset("$result", found, false);
|
||||
return STATUS_CONTINUE;
|
||||
|
@ -1258,7 +1258,7 @@ CMDRESULT cbInstrModCallFind(int argc, char* argv[])
|
|||
CMDRESULT cbInstrCommentList(int argc, char* argv[])
|
||||
{
|
||||
//setup reference view
|
||||
GuiReferenceDeleteAllColumns();
|
||||
GuiReferenceInitialize("Comments");
|
||||
GuiReferenceAddColumn(2 * sizeof(uint), "Address");
|
||||
GuiReferenceAddColumn(64, "Disassembly");
|
||||
GuiReferenceAddColumn(0, "Comment");
|
||||
|
@ -1293,7 +1293,7 @@ CMDRESULT cbInstrCommentList(int argc, char* argv[])
|
|||
CMDRESULT cbInstrLabelList(int argc, char* argv[])
|
||||
{
|
||||
//setup reference view
|
||||
GuiReferenceDeleteAllColumns();
|
||||
GuiReferenceInitialize("Labels");
|
||||
GuiReferenceAddColumn(2 * sizeof(uint), "Address");
|
||||
GuiReferenceAddColumn(64, "Disassembly");
|
||||
GuiReferenceAddColumn(0, "Label");
|
||||
|
@ -1328,7 +1328,7 @@ CMDRESULT cbInstrLabelList(int argc, char* argv[])
|
|||
CMDRESULT cbInstrBookmarkList(int argc, char* argv[])
|
||||
{
|
||||
//setup reference view
|
||||
GuiReferenceDeleteAllColumns();
|
||||
GuiReferenceInitialize("Bookmarks");
|
||||
GuiReferenceAddColumn(2 * sizeof(uint), "Address");
|
||||
GuiReferenceAddColumn(0, "Disassembly");
|
||||
GuiReferenceReloadData();
|
||||
|
@ -1361,7 +1361,7 @@ CMDRESULT cbInstrBookmarkList(int argc, char* argv[])
|
|||
CMDRESULT cbInstrFunctionList(int argc, char* argv[])
|
||||
{
|
||||
//setup reference view
|
||||
GuiReferenceDeleteAllColumns();
|
||||
GuiReferenceInitialize("Functions");
|
||||
GuiReferenceAddColumn(2 * sizeof(uint), "Start");
|
||||
GuiReferenceAddColumn(2 * sizeof(uint), "End");
|
||||
GuiReferenceAddColumn(64, "Disassembly (Start)");
|
||||
|
@ -1407,7 +1407,7 @@ CMDRESULT cbInstrFunctionList(int argc, char* argv[])
|
|||
CMDRESULT cbInstrLoopList(int argc, char* argv[])
|
||||
{
|
||||
//setup reference view
|
||||
GuiReferenceDeleteAllColumns();
|
||||
GuiReferenceInitialize("Loops");
|
||||
GuiReferenceAddColumn(2 * sizeof(uint), "Start");
|
||||
GuiReferenceAddColumn(2 * sizeof(uint), "End");
|
||||
GuiReferenceAddColumn(64, "Disassembly (Start)");
|
||||
|
@ -1465,9 +1465,9 @@ CMDRESULT cbInstrSleep(int argc, char* argv[])
|
|||
//reffindasm value[,page]
|
||||
static bool cbFindAsm(DISASM* disasm, BASIC_INSTRUCTION_INFO* basicinfo, REFINFO* refinfo)
|
||||
{
|
||||
if(!refinfo) //initialize
|
||||
if(!disasm && !basicinfo) //initialize
|
||||
{
|
||||
GuiReferenceDeleteAllColumns();
|
||||
GuiReferenceInitialize(refinfo->name);
|
||||
GuiReferenceAddColumn(2 * sizeof(uint), "Address");
|
||||
GuiReferenceAddColumn(0, "Disassembly");
|
||||
GuiReferenceReloadData();
|
||||
|
@ -1519,7 +1519,7 @@ CMDRESULT cbInstrFindAsm(int argc, char* argv[])
|
|||
disasmfast(dest, addr + size / 2, &basicinfo);
|
||||
|
||||
uint ticks = GetTickCount();
|
||||
int found = reffind(addr, size, cbFindAsm, (void*)&basicinfo.instruction[0], false);
|
||||
int found = reffind(addr, size, cbFindAsm, (void*)&basicinfo.instruction[0], false, "Command");
|
||||
dprintf("%u result(s) in %ums\n", found, GetTickCount() - ticks);
|
||||
varset("$result", found, false);
|
||||
return STATUS_CONTINUE;
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
#include "memory.h"
|
||||
#include "console.h"
|
||||
|
||||
int reffind(uint addr, uint size, CBREF cbRef, void* userinfo, bool silent)
|
||||
int reffind(uint addr, uint size, CBREF cbRef, void* userinfo, bool silent, const char* name)
|
||||
{
|
||||
uint start_addr;
|
||||
uint start_size;
|
||||
|
@ -47,10 +47,17 @@ int reffind(uint addr, uint size, CBREF cbRef, void* userinfo, bool silent)
|
|||
disasm.VirtualAddr = (UInt64)start_addr;
|
||||
uint i = 0;
|
||||
BASIC_INSTRUCTION_INFO basicinfo;
|
||||
cbRef(&disasm, &basicinfo, 0); //allow initializing
|
||||
REFINFO refinfo;
|
||||
memset(&refinfo, 0, sizeof(REFINFO));
|
||||
refinfo.userinfo = userinfo;
|
||||
char fullName[deflen] = "";
|
||||
char modname[MAX_MODULE_SIZE] = "";
|
||||
if(modnamefromaddr(start_addr, modname, true))
|
||||
sprintf_s(fullName, "%s (%s)", name, modname);
|
||||
else
|
||||
sprintf_s(fullName, "%s (%p)", name, start_addr);
|
||||
refinfo.name = fullName;
|
||||
cbRef(0, 0, &refinfo); //allow initializing
|
||||
while(i < start_size)
|
||||
{
|
||||
if(!(i % 0x1000))
|
||||
|
|
|
@ -9,12 +9,13 @@ struct REFINFO
|
|||
{
|
||||
int refcount;
|
||||
void* userinfo;
|
||||
const char* name;
|
||||
};
|
||||
|
||||
//typedefs
|
||||
typedef bool (*CBREF)(DISASM* disasm, BASIC_INSTRUCTION_INFO* basicinfo, REFINFO* refinfo);
|
||||
|
||||
//functions
|
||||
int reffind(uint page, uint size, CBREF cbRef, void* userinfo, bool silent);
|
||||
int reffind(uint page, uint size, CBREF cbRef, void* userinfo, bool silent, const char* name);
|
||||
|
||||
#endif //_REFERENCE_H
|
||||
|
|
Loading…
Reference in New Issue