Ignore:
Timestamp:
Nov 22, 2001, 12:34:44 PM (24 years ago)
Author:
phaller
Message:

.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/odinprof/symfile.cpp

    r7421 r7423  
    1 /* $Id: symfile.cpp,v 1.1 2001-11-22 10:44:00 phaller Exp $ */
     1/* $Id: symfile.cpp,v 1.2 2001-11-22 11:34:43 phaller Exp $ */
    22/*
    33 * Project Odin Software License can be found in LICENSE.TXT
     
    1717   => verify against kernel32\exceptionstack.cpp
    1818   (KERNEL32.SYM is not interpreted correctly)
    19  - try to demangle C++ names
    20  - fix weird duplicate lookups of same symbol (i. e. SetBkColor)
    2119 */
    2220
     
    204202
    205203
    206 BOOL   LXSymbolFile::getSymbolName(ULONG objNr,
    207                                    ULONG offset,
    208                                    PSZ   pszNameBuffer,
    209                                    ULONG ulNameBufferLength)
     204BOOL   LXSymbolFile::getSymbolName(ULONG  objNr,
     205                                   ULONG  offset,
     206                                   PSZ    pszNameBuffer,
     207                                   ULONG  ulNameBufferLength,
     208                                   PULONG pulSymbolOffset)
    210209{
    211210  PUCHAR    p = (PUCHAR)pSymbolRawData;
     
    264263              // find nearest symbol to the given offset
    265264              if (iCurrent > 0)
    266                 if (iClosest < iCurrent)
     265                if (iClosest > iCurrent)
    267266                  pSymClosest = pSymDef32;
    268267            }
     
    278277              // terminate the string in any case
    279278              pszNameBuffer[iLen] = 0;
     279              *pulSymbolOffset = 0;
    280280             
    281281              // OK, found
     
    293293        {
    294294          CHAR szBuf[128];
    295           CHAR szBuf2[128];
    296295          int  iLen;
    297296         
     
    301300          {
    302301            memcpy(szBuf, pSymClosest->achSymName, sizeof(szBuf));
    303             szBuf[ sizeof(szBuf) ] = 0;
    304             sprintf(szBuf2, "%s+%0xh", szBuf, offset - pSymClosest->wSymVal);
    305             iLen = min(pSymClosest->cbSymName, ulNameBufferLength);
     302            szBuf[ min(sizeof(szBuf), pSymClosest->cbSymName) ] = 0;
     303            iLen = min(strlen(szBuf), ulNameBufferLength);
    306304          }
    307305          else
    308306          {
    309             sprintf(szBuf2, "%s:obj%d:%08xh", getName(), objNr, offset);
    310             iLen = min(strlen(szBuf2), ulNameBufferLength);
     307            sprintf(szBuf, "%s:obj%d:%08xh", getName(), objNr, offset);
     308            iLen = min(strlen(szBuf), ulNameBufferLength);
    311309          }
    312310
    313           memcpy(pszNameBuffer, szBuf2, iLen);
     311          memcpy(pszNameBuffer, szBuf, iLen);
    314312          pszNameBuffer[iLen] = 0; // terminate the string in any case
     313          *pulSymbolOffset = offset - pSymClosest->wSymVal;
    315314          return TRUE;            // at least something usable has been found!
    316315        }
     
    386385
    387386 
    388 BOOL   SymbolFilePool::getSymbolName(PSZ   pszModule,
    389                                      ULONG objNr,
    390                                      ULONG offset,
    391                                      PSZ   pszNameBuffer,
    392                                      ULONG ulNameBufferLength)
     387BOOL   SymbolFilePool::getSymbolName(PSZ    pszModule,
     388                                     ULONG  objNr,
     389                                     ULONG  offset,
     390                                     PSZ    pszNameBuffer,
     391                                     ULONG  ulNameBufferLength,
     392                                     PULONG pulSymbolOffset)
    393393{
    394394  LXSymbolFile* pSym = (LXSymbolFile*)pHashModules->getElement(pszModule);
     
    421421                             offset,
    422422                             pszNameBuffer,
    423                              ulNameBufferLength);
     423                             ulNameBufferLength,
     424                             pulSymbolOffset);
    424425   
    425426    if (rc == TRUE)
     
    433434                name->Text(),
    434435                ulNameBufferLength);
    435      
    436436        delete name;
     437      }
     438
     439      // append symbol offsets
     440      if (*pulSymbolOffset != 0)
     441      {
     442        CHAR szBuf[256];
     443        sprintf(szBuf,
     444                "%s+%xh",
     445                pszNameBuffer,
     446                *pulSymbolOffset);
     447        strncpy(pszNameBuffer,
     448                szBuf,
     449                ulNameBufferLength);
    437450      }
    438451    }
Note: See TracChangeset for help on using the changeset viewer.