diff --git a/src/dbg/commands/cmd-analysis.cpp b/src/dbg/commands/cmd-analysis.cpp index 1d34f9c48e..2d4c268081 100644 --- a/src/dbg/commands/cmd-analysis.cpp +++ b/src/dbg/commands/cmd-analysis.cpp @@ -395,11 +395,7 @@ static void printExhandlers(const char* name, const std::vector & 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()); } } @@ -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 || diff --git a/src/dbg/commands/cmd-searching.cpp b/src/dbg/commands/cmd-searching.cpp index 746ace8595..aa4ea60c7c 100644 --- a/src/dbg/commands/cmd-searching.cpp +++ b/src/dbg/commands/cmd-searching.cpp @@ -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); @@ -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; } diff --git a/src/dbg/commands/cmd-undocumented.cpp b/src/dbg/commands/cmd-undocumented.cpp index 2882b1aab8..e56544bd0b 100644 --- a/src/dbg/commands/cmd-undocumented.cpp +++ b/src/dbg/commands/cmd-undocumented.cpp @@ -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 diff --git a/src/dbg/debugger.cpp b/src/dbg/debugger.cpp index cd1d49969a..e0f5d2b790 100644 --- a/src/dbg/debugger.cpp +++ b/src/dbg/debugger.cpp @@ -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) @@ -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); } @@ -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); } @@ -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 @@ -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")) { diff --git a/src/dbg/stringformat.cpp b/src/dbg/stringformat.cpp index bb2319aa0b..3844b56695 100644 --- a/src/dbg/stringformat.cpp +++ b/src/dbg/stringformat.cpp @@ -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: diff --git a/src/dbg/symbolinfo.cpp b/src/dbg/symbolinfo.cpp index 8978d357e8..fd78382fe2 100644 --- a/src/dbg/symbolinfo.cpp +++ b/src/dbg/symbolinfo.cpp @@ -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: @@ -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) diff --git a/src/dbg/symbolinfo.h b/src/dbg/symbolinfo.h index 69a82bfcac..30275298b9 100644 --- a/src/dbg/symbolinfo.h +++ b/src/dbg/symbolinfo.h @@ -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. diff --git a/src/dbg/value.cpp b/src/dbg/value.cpp index 8c877fd1a9..258edc10db 100644 --- a/src/dbg/value.cpp +++ b/src/dbg/value.cpp @@ -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 { @@ -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;