diff --git a/src/dbg/commands/cmd-types.cpp b/src/dbg/commands/cmd-types.cpp index f772747b..d68f65d2 100644 --- a/src/dbg/commands/cmd-types.cpp +++ b/src/dbg/commands/cmd-types.cpp @@ -331,6 +331,12 @@ struct PrintVisitor : TypeManager::Visitor return StringUtils::sprintf(format, *(T*)data); } + template + static String basicPrint(void* data, const char* format) + { + return StringUtils::sprintf(format, *(T*)data, *(U*)data); + } + static bool cbPrintPrimitive(const TYPEDESCRIPTOR* type, char* dest, size_t* destCount) { if(!type->addr) @@ -350,41 +356,41 @@ struct PrintVisitor : TypeManager::Visitor valueStr.clear(); break; case Int8: - valueStr += basicPrint(data(), "%c"); + valueStr += StringUtils::sprintf("0x%02X, '%s'", *(unsigned char*)data(), StringUtils::Escape(*(char*)data()).c_str()); break; case Uint8: - valueStr += basicPrint(data(), "0x%02X"); + valueStr += basicPrint(data(), "0x%02X, %d"); break; case Int16: - valueStr += basicPrint(data(), "%d"); + valueStr += basicPrint(data(), "0x%04X, %d"); break; case Uint16: - valueStr += basicPrint(data(), "%u"); + valueStr += basicPrint(data(), "0x%04X, %u"); break; case Int32: - valueStr += basicPrint(data(), "%d"); + valueStr += basicPrint(data(), "0x%08X, %d"); break; case Uint32: - valueStr += basicPrint(data(), "%u"); + valueStr += basicPrint(data(), "0x%08X, %u"); break; case Int64: - valueStr += basicPrint(data(), "%lld"); + valueStr += basicPrint(data(), "0x%016llX, %lld"); break; case Uint64: - valueStr += basicPrint(data(), "%llu"); + valueStr += basicPrint(data(), "0x%016llX, %llu"); break; case Dsint: #ifdef _WIN64 - valueStr += basicPrint(data(), "%lld"); + valueStr += basicPrint(data(), "0x%016llX, %lld"); #else - valueStr += basicPrint(data(), "%d"); + valueStr += basicPrint(data(), "0x%08X, %d"); #endif //_WIN64 break; case Duint: #ifdef _WIN64 - valueStr += basicPrint(data(), "%llu"); + valueStr += basicPrint(data(), "0x%016llX, %llu"); #else - valueStr += basicPrint(data(), "%u"); + valueStr += basicPrint(data(), "0x%08X, %u"); #endif //_WIN64 break; case Float: @@ -398,12 +404,12 @@ struct PrintVisitor : TypeManager::Visitor break; case PtrString: { - valueStr += basicPrint(data(), "0x%p"); + valueStr += basicPrint(data(), "0x%p "); Memory strdata(MAX_STRING_SIZE + 1); if(MemRead(*(duint*)data(), strdata(), strdata.size() - 1)) { valueStr += "\""; - valueStr += strdata(); + valueStr += StringUtils::Escape(strdata()); valueStr.push_back('\"'); } else @@ -413,7 +419,7 @@ struct PrintVisitor : TypeManager::Visitor case PtrWString: { - valueStr += basicPrint(data(), "0x%p"); + valueStr += basicPrint(data(), "0x%p "); Memory strdata(MAX_STRING_SIZE * 2 + 2); if(MemRead(*(duint*)data(), strdata(), strdata.size() - 2)) {