VirtualBox

Changeset 46127 in vbox for trunk/src/VBox/Runtime/tools


Ignore:
Timestamp:
May 16, 2013 2:11:26 PM (12 years ago)
Author:
vboxsync
Message:

Make it possible to load symbols on 64-bit windows 8.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/tools/RTNtDbgHelp.cpp

    r46078 r46127  
    245245        RTPrintf("*** %#018x - %s ***\n", pMod->uModAddr, pMod->szFullName);
    246246
    247         IMAGEHLP_MODULE64 ModInfo;
    248         RT_ZERO(ModInfo);
    249         ModInfo.SizeOfStruct = sizeof(ModInfo);
    250         if (SymGetModuleInfo64(g_hFake, pMod->uModAddr, &ModInfo))
    251         {
    252             RTPrintf("    BaseOfImage     = %#018llx\n", ModInfo.BaseOfImage);
    253             RTPrintf("    ImageSize       = %#010x\n", ModInfo.ImageSize);
    254             RTPrintf("    TimeDateStamp   = %#010x\n", ModInfo.TimeDateStamp);
    255             RTPrintf("    CheckSum        = %#010x\n", ModInfo.CheckSum);
    256             RTPrintf("    NumSyms         = %#010x (%u)\n", ModInfo.NumSyms, ModInfo.NumSyms);
    257             RTPrintf("    SymType         = %s\n", symTypeName(ModInfo.SymType));
    258             RTPrintf("    ModuleName      = %.32s\n", ModInfo.ModuleName);
    259             RTPrintf("    ImageName       = %.256s\n", ModInfo.ImageName);
    260             RTPrintf("    LoadedImageName = %.256s\n", ModInfo.LoadedImageName);
    261             RTPrintf("    LoadedPdbName   = %.256s\n", ModInfo.LoadedPdbName);
    262             RTPrintf("    CVSig           = %#010x\n", ModInfo.CVSig);
     247        static const int8_t s_acbVariations[]  = { 0, -4, -8, -12, -16, -20, -24, -28, -32, 4, 8, 12, 16, 20, 24, 28, 32 };
     248        unsigned            iVariation = 0;
     249        union
     250        {
     251            IMAGEHLP_MODULE64   ModInfo;
     252            uint8_t             abPadding[sizeof(IMAGEHLP_MODULE64) + 64];
     253        } u;
     254
     255        BOOL fRc;
     256        do
     257        {
     258            RT_ZERO(u.ModInfo);
     259            u.ModInfo.SizeOfStruct = sizeof(u.ModInfo) + s_acbVariations[iVariation++];
     260            fRc = SymGetModuleInfo64(g_hFake, pMod->uModAddr, &u.ModInfo);
     261        } while (!fRc && GetLastError() == ERROR_INVALID_PARAMETER && iVariation < RT_ELEMENTS(s_acbVariations));
     262
     263        if (fRc)
     264        {
     265            RTPrintf("    BaseOfImage     = %#018llx\n", u.ModInfo.BaseOfImage);
     266            RTPrintf("    ImageSize       = %#010x\n", u.ModInfo.ImageSize);
     267            RTPrintf("    TimeDateStamp   = %#010x\n", u.ModInfo.TimeDateStamp);
     268            RTPrintf("    CheckSum        = %#010x\n", u.ModInfo.CheckSum);
     269            RTPrintf("    NumSyms         = %#010x (%u)\n", u.ModInfo.NumSyms, u.ModInfo.NumSyms);
     270            RTPrintf("    SymType         = %s\n", symTypeName(u.ModInfo.SymType));
     271            RTPrintf("    ModuleName      = %.32s\n", u.ModInfo.ModuleName);
     272            RTPrintf("    ImageName       = %.256s\n", u.ModInfo.ImageName);
     273            RTPrintf("    LoadedImageName = %.256s\n", u.ModInfo.LoadedImageName);
     274            RTPrintf("    LoadedPdbName   = %.256s\n", u.ModInfo.LoadedPdbName);
     275            RTPrintf("    CVSig           = %#010x\n", u.ModInfo.CVSig);
    263276            /** @todo CVData. */
    264             RTPrintf("    PdbSig          = %#010x\n", ModInfo.PdbSig);
    265             RTPrintf("    PdbSig70        = %RTuuid\n", &ModInfo.PdbSig70);
    266             RTPrintf("    PdbAge          = %#010x\n", ModInfo.PdbAge);
    267             RTPrintf("    PdbUnmatched    = %RTbool\n", ModInfo.PdbUnmatched);
    268             RTPrintf("    DbgUnmatched    = %RTbool\n", ModInfo.DbgUnmatched);
    269             RTPrintf("    LineNumbers     = %RTbool\n", ModInfo.LineNumbers);
    270             RTPrintf("    GlobalSymbols   = %RTbool\n", ModInfo.GlobalSymbols);
    271             RTPrintf("    TypeInfo        = %RTbool\n", ModInfo.TypeInfo);
    272             RTPrintf("    SourceIndexed   = %RTbool\n", ModInfo.SourceIndexed);
    273             RTPrintf("    Publics         = %RTbool\n", ModInfo.Publics);
     277            RTPrintf("    PdbSig          = %#010x\n", u.ModInfo.PdbSig);
     278            RTPrintf("    PdbSig70        = %RTuuid\n", &u.ModInfo.PdbSig70);
     279            RTPrintf("    PdbAge          = %#010x\n", u.ModInfo.PdbAge);
     280            RTPrintf("    PdbUnmatched    = %RTbool\n", u.ModInfo.PdbUnmatched);
     281            RTPrintf("    DbgUnmatched    = %RTbool\n", u.ModInfo.DbgUnmatched);
     282            RTPrintf("    LineNumbers     = %RTbool\n", u.ModInfo.LineNumbers);
     283            RTPrintf("    GlobalSymbols   = %RTbool\n", u.ModInfo.GlobalSymbols);
     284            RTPrintf("    TypeInfo        = %RTbool\n", u.ModInfo.TypeInfo);
     285            RTPrintf("    SourceIndexed   = %RTbool\n", u.ModInfo.SourceIndexed);
     286            RTPrintf("    Publics         = %RTbool\n", u.ModInfo.Publics);
    274287        }
    275288        else
     
    350363
    351364            case 'h':
    352                 RTPrintf("usage: %s [-v|--verbose] [-q|--quiet] [-a <addr>] [-l <file>] [-d] [...]\n"
     365                RTPrintf("usage: %s [-v|--verbose] [-q|--quiet] [--set-debug-info] [-a <addr>] [-l <file>] [-d] [...]\n"
    353366                         "   or: %s [-V|--version]\n"
    354367                         "   or: %s [-h|--help]\n",
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette