Skip to content

Commit

Permalink
Log the thread parameter and refactor SymGetSymbolicName
Browse files Browse the repository at this point in the history
  • Loading branch information
mrexodia committed Jun 19, 2022
1 parent 2fe1cee commit b7402c2
Show file tree
Hide file tree
Showing 8 changed files with 55 additions and 81 deletions.
18 changes: 3 additions & 15 deletions src/dbg/commands/cmd-analysis.cpp
Expand Up @@ -395,11 +395,7 @@ static void printExhandlers(const char* name, const std::vector<duint> & entries
dprintf("%s:\n", name);
for(auto entry : entries)
{
auto symbolic = SymGetSymbolicName(entry);
if(symbolic.length())
dprintf_untranslated("%p %s\n", entry, symbolic.c_str());
else
dprintf_untranslated("%p\n", entry);
dputs_untranslated(SymGetSymbolicName(entry).c_str());
}
}

Expand Down Expand Up @@ -467,20 +463,12 @@ bool cbInstrExinfo(int argc, char* argv[])
else
dprintf_untranslated(" ExceptionCode: %08X\n", record.ExceptionCode);
dprintf_untranslated(" ExceptionFlags: %08X\n", record.ExceptionFlags);
auto symbolic = SymGetSymbolicName(duint(record.ExceptionAddress));
if(symbolic.length())
dprintf_untranslated(" ExceptionAddress: %p %s\n", record.ExceptionAddress, symbolic.c_str());
else
dprintf_untranslated(" ExceptionAddress: %p\n", record.ExceptionAddress);
dprintf_untranslated(" ExceptionAddress: %s\n", SymGetSymbolicName(duint(record.ExceptionAddress)).c_str());
dprintf_untranslated(" NumberParameters: %u\n", record.NumberParameters);
if(record.NumberParameters)
for(DWORD i = 0; i < record.NumberParameters; i++)
{
symbolic = SymGetSymbolicName(duint(record.ExceptionInformation[i]));
if(symbolic.length())
dprintf_untranslated("ExceptionInformation[%02u]: %p %s", i, record.ExceptionInformation[i], symbolic.c_str());
else
dprintf_untranslated("ExceptionInformation[%02u]: %p", i, record.ExceptionInformation[i]);
dprintf_untranslated("ExceptionInformation[%02u]: %s", i, SymGetSymbolicName(duint(record.ExceptionInformation[i])).c_str());
//https://msdn.microsoft.com/en-us/library/windows/desktop/aa363082(v=vs.85).aspx
if(record.ExceptionCode == EXCEPTION_ACCESS_VIOLATION ||
record.ExceptionCode == EXCEPTION_IN_PAGE_ERROR ||
Expand Down
6 changes: 1 addition & 5 deletions src/dbg/commands/cmd-searching.cpp
Expand Up @@ -750,9 +750,6 @@ static bool cbModCallFind(Zydis* disasm, BASIC_INSTRUCTION_INFO* basicinfo, REFI
}
if(foundaddr)
{
auto symbolic = SymGetSymbolicName(foundaddr);
if(!symbolic.length())
symbolic = StringUtils::sprintf("%p", foundaddr);
char addrText[20] = "";
sprintf_s(addrText, "%p", disasm->Address());
GuiReferenceSetRowCount(refinfo->refcount + 1);
Expand All @@ -761,13 +758,12 @@ static bool cbModCallFind(Zydis* disasm, BASIC_INSTRUCTION_INFO* basicinfo, REFI
if(GuiGetDisassembly((duint)disasm->Address(), disassembly))
{
GuiReferenceSetCellContent(refinfo->refcount, 1, disassembly);
GuiReferenceSetCellContent(refinfo->refcount, 2, symbolic.c_str());
}
else
{
GuiReferenceSetCellContent(refinfo->refcount, 1, disasm->InstructionText().c_str());
GuiReferenceSetCellContent(refinfo->refcount, 2, symbolic.c_str());
}
GuiReferenceSetCellContent(refinfo->refcount, 2, SymGetSymbolicName(foundaddr).c_str());
}
return foundaddr != 0;
}
Expand Down
2 changes: 1 addition & 1 deletion src/dbg/commands/cmd-undocumented.cpp
Expand Up @@ -39,7 +39,7 @@ bool cbBadCmd(int argc, char* argv[])
else
valsize = 1;
char format_str[deflen] = "";
auto symbolic = SymGetSymbolicName(value);
auto symbolic = SymGetSymbolicName(value, false);
if(symbolic.length())
symbolic = " " + symbolic;
if(isvar) // and *cmd!='.' and *cmd!='x') //prevent stupid 0=0 stuff
Expand Down
66 changes: 25 additions & 41 deletions src/dbg/debugger.cpp
Expand Up @@ -600,20 +600,10 @@ static void printSoftBpInfo(const BREAKPOINT & bp)
else if((titantype & UE_BREAKPOINT_TYPE_LONG_INT3) == UE_BREAKPOINT_TYPE_LONG_INT3)
bptype = "LONG INT3";
auto symbolicname = SymGetSymbolicName(bp.addr);
if(symbolicname.length())
{
if(*bp.name)
dprintf(QT_TRANSLATE_NOOP("DBG", "%s breakpoint \"%s\" at %s (%p)!\n"), bptype, bp.name, symbolicname.c_str(), bp.addr);
else
dprintf(QT_TRANSLATE_NOOP("DBG", "%s breakpoint at %s (%p)!\n"), bptype, symbolicname.c_str(), bp.addr);
}
if(*bp.name)
dprintf(QT_TRANSLATE_NOOP("DBG", "%s breakpoint \"%s\" at %s!\n"), bptype, bp.name, symbolicname.c_str());
else
{
if(*bp.name)
dprintf(QT_TRANSLATE_NOOP("DBG", "%s breakpoint \"%s\" at %p!\n"), bptype, bp.name, bp.addr);
else
dprintf(QT_TRANSLATE_NOOP("DBG", "%s breakpoint at %p!\n"), bptype, bp.addr);
}
dprintf(QT_TRANSLATE_NOOP("DBG", "%s breakpoint at %s!\n"), bptype, symbolicname.c_str());
}

static void printHwBpInfo(const BREAKPOINT & bp)
Expand Down Expand Up @@ -653,20 +643,10 @@ static void printHwBpInfo(const BREAKPOINT & bp)
bptype = _strdup(" ");
}
auto symbolicname = SymGetSymbolicName(bp.addr);
if(symbolicname.length())
{
if(*bp.name)
dprintf(QT_TRANSLATE_NOOP("DBG", "Hardware breakpoint (%s%s) \"%s\" at %s (%p)!\n"), bpsize, bptype, bp.name, symbolicname.c_str(), bp.addr);
else
dprintf(QT_TRANSLATE_NOOP("DBG", "Hardware breakpoint (%s%s) at %s (%p)!\n"), bpsize, bptype, symbolicname.c_str(), bp.addr);
}
if(*bp.name)
dprintf(QT_TRANSLATE_NOOP("DBG", "Hardware breakpoint%s \"%s\" at %s!\n"), bptype, bp.name, symbolicname.c_str());
else
{
if(*bp.name)
dprintf(QT_TRANSLATE_NOOP("DBG", "Hardware breakpoint (%s%s) \"%s\" at %p!\n"), bpsize, bptype, bp.name, bp.addr);
else
dprintf(QT_TRANSLATE_NOOP("DBG", "Hardware breakpoint (%s%s) at %p!\n"), bpsize, bptype, bp.addr);
}
dprintf(QT_TRANSLATE_NOOP("DBG", "Hardware breakpoint%s at %s!\n"), bptype, symbolicname.c_str());
free(bptype);
}

Expand All @@ -691,19 +671,22 @@ static void printMemBpInfo(const BREAKPOINT & bp, const void* ExceptionAddress)
bptype = _strdup("");
}
auto symbolicname = SymGetSymbolicName(bp.addr);
if(symbolicname.length())
if(*bp.name)
{
if(*bp.name)
dprintf(QT_TRANSLATE_NOOP("DBG", "Memory breakpoint%s \"%s\" at %s (%p, %p)!\n"), bptype, bp.name, symbolicname.c_str(), bp.addr, ExceptionAddress);
else
dprintf(QT_TRANSLATE_NOOP("DBG", "Memory breakpoint%s at %s (%p, %p)!\n"), bptype, symbolicname.c_str(), bp.addr, ExceptionAddress);
dprintf(QT_TRANSLATE_NOOP("DBG", "Memory breakpoint%s \"%s\" at %s, exception address: %s!\n"),
bptype,
bp.name,
symbolicname.c_str(),
SymGetSymbolicName(duint(ExceptionAddress)).c_str()
);
}
else
{
if(*bp.name)
dprintf(QT_TRANSLATE_NOOP("DBG", "Memory breakpoint%s \"%s\" at %p (%p)!\n"), bptype, bp.name, bp.addr, ExceptionAddress);
else
dprintf(QT_TRANSLATE_NOOP("DBG", "Memory breakpoint%s at %p (%p)!\n"), bptype, bp.addr, ExceptionAddress);
dprintf(QT_TRANSLATE_NOOP("DBG", "Memory breakpoint%s at %s, exception address: %s!\n"),
bptype,
symbolicname.c_str(),
SymGetSymbolicName(duint(ExceptionAddress)).c_str()
);
}
free(bptype);
}
Expand Down Expand Up @@ -1008,8 +991,7 @@ void cbRunToUserCodeBreakpoint(void* ExceptionAddress)
{
hActiveThread = ThreadGetHandle(((DEBUG_EVENT*)GetDebugData())->dwThreadId);
auto CIP = GetContextDataEx(hActiveThread, UE_CIP);
auto symbolicname = SymGetSymbolicName(CIP);
dprintf(QT_TRANSLATE_NOOP("DBG", "User code reached at %s (%p)!"), symbolicname.c_str(), CIP);
dprintf(QT_TRANSLATE_NOOP("DBG", "User code reached at %s"), SymGetSymbolicName(CIP).c_str());
// lock
lock(WAITID_RUN);
// Trace record
Expand Down Expand Up @@ -1595,10 +1577,12 @@ static void cbCreateThread(CREATE_THREAD_DEBUG_INFO* CreateThread)
plugincbcall(CB_CREATETHREAD, &callbackInfo);

auto entry = duint(CreateThread->lpStartAddress);
auto symbolic = SymGetSymbolicName(entry);
if(!symbolic.length())
symbolic = StringUtils::sprintf("%p", entry);
dprintf(QT_TRANSLATE_NOOP("DBG", "Thread %X created, Entry: %s\n"), dwThreadId, symbolic.c_str());
auto parameter = GetContextDataEx(hActiveThread, ArchValue(UE_EBX, UE_RDX));
dprintf(QT_TRANSLATE_NOOP("DBG", "Thread %X created, Entry: %s, Parameter: %s\n"),
dwThreadId,
SymGetSymbolicName(entry).c_str(),
SymGetSymbolicName(parameter).c_str()
);

if(settingboolget("Events", "ThreadEntry"))
{
Expand Down
6 changes: 2 additions & 4 deletions src/dbg/stringformat.cpp
Expand Up @@ -163,11 +163,9 @@ static String printValue(FormatValueType value, StringValueType type)
{
auto symbolic = SymGetSymbolicName(valuint);
if(disasmgetstringatwrapper(valuint, string, false))
return string;
else if(symbolic.length())
return symbolic;
return symbolic + " " + string;
else
return "";
return symbolic;
}
break;
case StringValueType::Module:
Expand Down
22 changes: 18 additions & 4 deletions src/dbg/symbolinfo.cpp
Expand Up @@ -311,7 +311,7 @@ bool SymAddrFromName(const char* Name, duint* Address)
return false;
}

String SymGetSymbolicName(duint Address)
String SymGetSymbolicName(duint Address, bool IncludeAddress)
{
//
// This resolves an address to a module and symbol:
Expand All @@ -327,12 +327,26 @@ String SymGetSymbolicName(duint Address)
{
if(hasModule)
return StringUtils::sprintf("%s.%p", modname, Address);
return "";
else if(IncludeAddress)
return StringUtils::sprintf("%p", Address);
else
return "";
}

if(hasModule)
return StringUtils::sprintf("<%s.%s>", modname, label);
return StringUtils::sprintf("<%s>", label);
{
if(IncludeAddress)
return StringUtils::sprintf("<%s.%s> (%p)", modname, label, Address);
else
return StringUtils::sprintf("<%s.%s>", modname, label);
}
else
{
if(IncludeAddress)
return StringUtils::sprintf("<%s> (%p)", label, Address);
else
return StringUtils::sprintf("<%s>", label);
}
}

bool SymGetSourceLine(duint Cip, char* FileName, int* Line, duint* disp)
Expand Down
2 changes: 1 addition & 1 deletion src/dbg/symbolinfo.h
Expand Up @@ -12,7 +12,7 @@ void SymUpdateModuleList();
bool SymDownloadSymbol(duint Base, const char* SymbolStore);
void SymDownloadAllSymbols(const char* SymbolStore);
bool SymAddrFromName(const char* Name, duint* Address);
String SymGetSymbolicName(duint Address);
String SymGetSymbolicName(duint Address, bool IncludeAddress = true);

/**
\brief Gets the source code file name and line from an address.
Expand Down
14 changes: 4 additions & 10 deletions src/dbg/value.cpp
Expand Up @@ -1587,14 +1587,12 @@ bool valapifromstring(const char* name, duint* value, int* value_size, bool prin
if(!printall || silent)
return true;
for(int i = 0; i < found; i++)
{
if(i != kernel32)
{
auto symbolic = SymGetSymbolicName(addrfound()[i]);
if(symbolic.length())
dprintf_untranslated("%p %s\n", addrfound()[i], symbolic.c_str());
else
dprintf_untranslated("%p\n", addrfound()[i]);
dputs_untranslated(SymGetSymbolicName(addrfound()[i]).c_str());
}
}
}
else
{
Expand All @@ -1603,11 +1601,7 @@ bool valapifromstring(const char* name, duint* value, int* value_size, bool prin
return true;
for(int i = 1; i < found; i++)
{
auto symbolic = SymGetSymbolicName(addrfound()[i]);
if(symbolic.length())
dprintf_untranslated("%p %s\n", addrfound()[i], symbolic.c_str());
else
dprintf_untranslated("%p\n", addrfound()[i]);
dputs_untranslated(SymGetSymbolicName(addrfound()[i]).c_str());
}
}
return true;
Expand Down

0 comments on commit b7402c2

Please sign in to comment.