Skip to content

Commit a134c11

Browse files
committed
DBG: new tabbed reference view code
1 parent efe2f12 commit a134c11

File tree

5 files changed

+40
-26
lines changed

5 files changed

+40
-26
lines changed

x64_dbg_bridge/bridgemain.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -848,6 +848,11 @@ BRIDGE_IMPEXP void GuiReferenceDeleteAllColumns()
848848
_gui_sendmessage(GUI_REF_DELETEALLCOLUMNS, 0, 0);
849849
}
850850

851+
BRIDGE_IMPEXP void GuiReferenceInitialize(const char* name)
852+
{
853+
_gui_sendmessage(GUI_REF_INITIALIZE, (void*)name, 0);
854+
}
855+
851856
BRIDGE_IMPEXP void GuiReferenceSetCellContent(int row, int col, const char* str)
852857
{
853858
CELLINFO info;

x64_dbg_bridge/bridgemain.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -724,16 +724,16 @@ typedef enum
724724
GUI_GETLINE_WINDOW, // param1=const char* title, param2=char* text
725725
GUI_AUTOCOMPLETE_ADDCMD, // param1=const char* cmd, param2=ununsed
726726
GUI_AUTOCOMPLETE_DELCMD, // param1=const char* cmd, param2=ununsed
727-
GUI_AUTOCOMPLETE_CLEARALL, // param1=ununsed, param2=unused
727+
GUI_AUTOCOMPLETE_CLEARALL, // param1=unused, param2=unused
728728
GUI_SCRIPT_ENABLEHIGHLIGHTING, // param1=bool enable, param2=unused
729729
GUI_ADD_MSG_TO_STATUSBAR, // param1=const char* msg, param2=unused
730730
GUI_UPDATE_SIDEBAR, // param1=unused, param2=unused
731731
GUI_REPAINT_TABLE_VIEW, // param1=unused, param2=unused
732732
GUI_UPDATE_PATCHES, // param1=unused, param2=unused
733733
GUI_UPDATE_CALLSTACK, // param1=unused, param2=unused
734-
GUI_SYMBOL_REFRESH_CURRENT, // param1=unused, param2=unused
735-
GUI_UPDATE_MEMORY_VIEW // param1=unused, param2=unused
736-
734+
GUI_SYMBOL_REFRESH_CURRENT, // param1=unused, param2=unused
735+
GUI_UPDATE_MEMORY_VIEW, // param1=unused, param2=unused
736+
GUI_REF_INITIALIZE // param1=const char* name param2=unused
737737
} GUIMSG;
738738

739739
//GUI structures
@@ -780,6 +780,7 @@ BRIDGE_IMPEXP void GuiReferenceAddColumn(int width, const char* title);
780780
BRIDGE_IMPEXP void GuiReferenceSetRowCount(int count);
781781
BRIDGE_IMPEXP int GuiReferenceGetRowCount();
782782
BRIDGE_IMPEXP void GuiReferenceDeleteAllColumns();
783+
BRIDGE_IMPEXP void GuiReferenceInitialize(const char* name);
783784
BRIDGE_IMPEXP void GuiReferenceSetCellContent(int row, int col, const char* str);
784785
BRIDGE_IMPEXP const char* GuiReferenceGetCellContent(int row, int col);
785786
BRIDGE_IMPEXP void GuiReferenceReloadData();

x64_dbg_dbg/instruction.cpp

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -760,7 +760,7 @@ CMDRESULT cbInstrXor(int argc, char* argv[])
760760

761761
CMDRESULT cbInstrRefinit(int argc, char* argv[])
762762
{
763-
GuiReferenceDeleteAllColumns();
763+
GuiReferenceInitialize("Script");
764764
GuiReferenceAddColumn(sizeof(uint) * 2, "Address");
765765
GuiReferenceAddColumn(0, "Data");
766766
GuiReferenceSetRowCount(0);
@@ -800,9 +800,9 @@ struct VALUERANGE
800800
//reffind value[,page]
801801
static bool cbRefFind(DISASM* disasm, BASIC_INSTRUCTION_INFO* basicinfo, REFINFO* refinfo)
802802
{
803-
if(!refinfo) //initialize
803+
if(!disasm && !basicinfo) //initialize
804804
{
805-
GuiReferenceDeleteAllColumns();
805+
GuiReferenceInitialize(refinfo->name);
806806
GuiReferenceAddColumn(2 * sizeof(uint), "Address");
807807
GuiReferenceAddColumn(0, "Disassembly");
808808
GuiReferenceReloadData();
@@ -880,7 +880,7 @@ CMDRESULT cbInstrRefFindRange(int argc, char* argv[])
880880
if(!valfromstring(argv[4], &size))
881881
size = 0;
882882
uint ticks = GetTickCount();
883-
int found = reffind(addr, size, cbRefFind, &range, false);
883+
int found = reffind(addr, size, cbRefFind, &range, false, "Constant");
884884
dprintf("%u reference(s) in %ums\n", found, GetTickCount() - ticks);
885885
varset("$result", found, false);
886886
return STATUS_CONTINUE;
@@ -889,9 +889,9 @@ CMDRESULT cbInstrRefFindRange(int argc, char* argv[])
889889
//refstr [page]
890890
bool cbRefStr(DISASM* disasm, BASIC_INSTRUCTION_INFO* basicinfo, REFINFO* refinfo)
891891
{
892-
if(!refinfo) //initialize
892+
if(!disasm && !basicinfo) //initialize
893893
{
894-
GuiReferenceDeleteAllColumns();
894+
GuiReferenceInitialize(refinfo->name);
895895
GuiReferenceAddColumn(2 * sizeof(uint), "Address");
896896
GuiReferenceAddColumn(64, "Disassembly");
897897
GuiReferenceAddColumn(500, "String");
@@ -945,7 +945,7 @@ CMDRESULT cbInstrRefStr(int argc, char* argv[])
945945
if(!valfromstring(argv[2], &size, true))
946946
size = 0;
947947
uint ticks = GetTickCount();
948-
int found = reffind(addr, size, cbRefStr, 0, false);
948+
int found = reffind(addr, size, cbRefStr, 0, false, "Strings");
949949
dprintf("%u string(s) in %ums\n", found, GetTickCount() - ticks);
950950
varset("$result", found, false);
951951
return STATUS_CONTINUE;
@@ -1160,7 +1160,7 @@ CMDRESULT cbInstrFindAll(int argc, char* argv[])
11601160
else
11611161
find_size = size - start;
11621162
//setup reference view
1163-
GuiReferenceDeleteAllColumns();
1163+
GuiReferenceInitialize("Occurrences");
11641164
GuiReferenceAddColumn(2 * sizeof(uint), "Address");
11651165
if(findData)
11661166
GuiReferenceAddColumn(0, "&Data&");
@@ -1209,9 +1209,9 @@ CMDRESULT cbInstrFindAll(int argc, char* argv[])
12091209
//modcallfind [page]
12101210
static bool cbModCallFind(DISASM* disasm, BASIC_INSTRUCTION_INFO* basicinfo, REFINFO* refinfo)
12111211
{
1212-
if(!refinfo) //initialize
1212+
if(!disasm && !basicinfo) //initialize
12131213
{
1214-
GuiReferenceDeleteAllColumns();
1214+
GuiReferenceInitialize(refinfo->name);
12151215
GuiReferenceAddColumn(2 * sizeof(uint), "Address");
12161216
GuiReferenceAddColumn(0, "Disassembly");
12171217
GuiReferenceReloadData();
@@ -1249,7 +1249,7 @@ CMDRESULT cbInstrModCallFind(int argc, char* argv[])
12491249
if(!valfromstring(argv[2], &size, true))
12501250
size = 0;
12511251
uint ticks = GetTickCount();
1252-
int found = reffind(addr, size, cbModCallFind, 0, false);
1252+
int found = reffind(addr, size, cbModCallFind, 0, false, "Calls");
12531253
dprintf("%u call(s) in %ums\n", found, GetTickCount() - ticks);
12541254
varset("$result", found, false);
12551255
return STATUS_CONTINUE;
@@ -1258,7 +1258,7 @@ CMDRESULT cbInstrModCallFind(int argc, char* argv[])
12581258
CMDRESULT cbInstrCommentList(int argc, char* argv[])
12591259
{
12601260
//setup reference view
1261-
GuiReferenceDeleteAllColumns();
1261+
GuiReferenceInitialize("Comments");
12621262
GuiReferenceAddColumn(2 * sizeof(uint), "Address");
12631263
GuiReferenceAddColumn(64, "Disassembly");
12641264
GuiReferenceAddColumn(0, "Comment");
@@ -1293,7 +1293,7 @@ CMDRESULT cbInstrCommentList(int argc, char* argv[])
12931293
CMDRESULT cbInstrLabelList(int argc, char* argv[])
12941294
{
12951295
//setup reference view
1296-
GuiReferenceDeleteAllColumns();
1296+
GuiReferenceInitialize("Labels");
12971297
GuiReferenceAddColumn(2 * sizeof(uint), "Address");
12981298
GuiReferenceAddColumn(64, "Disassembly");
12991299
GuiReferenceAddColumn(0, "Label");
@@ -1328,7 +1328,7 @@ CMDRESULT cbInstrLabelList(int argc, char* argv[])
13281328
CMDRESULT cbInstrBookmarkList(int argc, char* argv[])
13291329
{
13301330
//setup reference view
1331-
GuiReferenceDeleteAllColumns();
1331+
GuiReferenceInitialize("Bookmarks");
13321332
GuiReferenceAddColumn(2 * sizeof(uint), "Address");
13331333
GuiReferenceAddColumn(0, "Disassembly");
13341334
GuiReferenceReloadData();
@@ -1361,7 +1361,7 @@ CMDRESULT cbInstrBookmarkList(int argc, char* argv[])
13611361
CMDRESULT cbInstrFunctionList(int argc, char* argv[])
13621362
{
13631363
//setup reference view
1364-
GuiReferenceDeleteAllColumns();
1364+
GuiReferenceInitialize("Functions");
13651365
GuiReferenceAddColumn(2 * sizeof(uint), "Start");
13661366
GuiReferenceAddColumn(2 * sizeof(uint), "End");
13671367
GuiReferenceAddColumn(64, "Disassembly (Start)");
@@ -1407,7 +1407,7 @@ CMDRESULT cbInstrFunctionList(int argc, char* argv[])
14071407
CMDRESULT cbInstrLoopList(int argc, char* argv[])
14081408
{
14091409
//setup reference view
1410-
GuiReferenceDeleteAllColumns();
1410+
GuiReferenceInitialize("Loops");
14111411
GuiReferenceAddColumn(2 * sizeof(uint), "Start");
14121412
GuiReferenceAddColumn(2 * sizeof(uint), "End");
14131413
GuiReferenceAddColumn(64, "Disassembly (Start)");
@@ -1465,9 +1465,9 @@ CMDRESULT cbInstrSleep(int argc, char* argv[])
14651465
//reffindasm value[,page]
14661466
static bool cbFindAsm(DISASM* disasm, BASIC_INSTRUCTION_INFO* basicinfo, REFINFO* refinfo)
14671467
{
1468-
if(!refinfo) //initialize
1468+
if(!disasm && !basicinfo) //initialize
14691469
{
1470-
GuiReferenceDeleteAllColumns();
1470+
GuiReferenceInitialize(refinfo->name);
14711471
GuiReferenceAddColumn(2 * sizeof(uint), "Address");
14721472
GuiReferenceAddColumn(0, "Disassembly");
14731473
GuiReferenceReloadData();
@@ -1519,7 +1519,7 @@ CMDRESULT cbInstrFindAsm(int argc, char* argv[])
15191519
disasmfast(dest, addr + size / 2, &basicinfo);
15201520

15211521
uint ticks = GetTickCount();
1522-
int found = reffind(addr, size, cbFindAsm, (void*)&basicinfo.instruction[0], false);
1522+
int found = reffind(addr, size, cbFindAsm, (void*)&basicinfo.instruction[0], false, "Command");
15231523
dprintf("%u result(s) in %ums\n", found, GetTickCount() - ticks);
15241524
varset("$result", found, false);
15251525
return STATUS_CONTINUE;

x64_dbg_dbg/reference.cpp

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
#include "memory.h"
44
#include "console.h"
55

6-
int reffind(uint addr, uint size, CBREF cbRef, void* userinfo, bool silent)
6+
int reffind(uint addr, uint size, CBREF cbRef, void* userinfo, bool silent, const char* name)
77
{
88
uint start_addr;
99
uint start_size;
@@ -47,10 +47,17 @@ int reffind(uint addr, uint size, CBREF cbRef, void* userinfo, bool silent)
4747
disasm.VirtualAddr = (UInt64)start_addr;
4848
uint i = 0;
4949
BASIC_INSTRUCTION_INFO basicinfo;
50-
cbRef(&disasm, &basicinfo, 0); //allow initializing
5150
REFINFO refinfo;
5251
memset(&refinfo, 0, sizeof(REFINFO));
5352
refinfo.userinfo = userinfo;
53+
char fullName[deflen] = "";
54+
char modname[MAX_MODULE_SIZE] = "";
55+
if(modnamefromaddr(start_addr, modname, true))
56+
sprintf_s(fullName, "%s (%s)", name, modname);
57+
else
58+
sprintf_s(fullName, "%s (%p)", name, start_addr);
59+
refinfo.name = fullName;
60+
cbRef(0, 0, &refinfo); //allow initializing
5461
while(i < start_size)
5562
{
5663
if(!(i % 0x1000))

x64_dbg_dbg/reference.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,13 @@ struct REFINFO
99
{
1010
int refcount;
1111
void* userinfo;
12+
const char* name;
1213
};
1314

1415
//typedefs
1516
typedef bool (*CBREF)(DISASM* disasm, BASIC_INSTRUCTION_INFO* basicinfo, REFINFO* refinfo);
1617

1718
//functions
18-
int reffind(uint page, uint size, CBREF cbRef, void* userinfo, bool silent);
19+
int reffind(uint page, uint size, CBREF cbRef, void* userinfo, bool silent, const char* name);
1920

2021
#endif //_REFERENCE_H

0 commit comments

Comments
 (0)