Log the thread parameter and refactor SymGetSymbolicName
This commit is contained in:
parent
2fe1ceedec
commit
b7402c2fb9
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -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 ||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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"))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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.
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
Loading…
Reference in New Issue