Changeset 7423 for trunk/src/odinprof/symfile.cpp
- Timestamp:
- Nov 22, 2001, 12:34:44 PM (24 years ago)
- 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:00phaller Exp $ */1 /* $Id: symfile.cpp,v 1.2 2001-11-22 11:34:43 phaller Exp $ */ 2 2 /* 3 3 * Project Odin Software License can be found in LICENSE.TXT … … 17 17 => verify against kernel32\exceptionstack.cpp 18 18 (KERNEL32.SYM is not interpreted correctly) 19 - try to demangle C++ names20 - fix weird duplicate lookups of same symbol (i. e. SetBkColor)21 19 */ 22 20 … … 204 202 205 203 206 BOOL LXSymbolFile::getSymbolName(ULONG objNr, 207 ULONG offset, 208 PSZ pszNameBuffer, 209 ULONG ulNameBufferLength) 204 BOOL LXSymbolFile::getSymbolName(ULONG objNr, 205 ULONG offset, 206 PSZ pszNameBuffer, 207 ULONG ulNameBufferLength, 208 PULONG pulSymbolOffset) 210 209 { 211 210 PUCHAR p = (PUCHAR)pSymbolRawData; … … 264 263 // find nearest symbol to the given offset 265 264 if (iCurrent > 0) 266 if (iClosest <iCurrent)265 if (iClosest > iCurrent) 267 266 pSymClosest = pSymDef32; 268 267 } … … 278 277 // terminate the string in any case 279 278 pszNameBuffer[iLen] = 0; 279 *pulSymbolOffset = 0; 280 280 281 281 // OK, found … … 293 293 { 294 294 CHAR szBuf[128]; 295 CHAR szBuf2[128];296 295 int iLen; 297 296 … … 301 300 { 302 301 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); 306 304 } 307 305 else 308 306 { 309 sprintf(szBuf 2, "%s:obj%d:%08xh", getName(), objNr, offset);310 iLen = min(strlen(szBuf 2), ulNameBufferLength);307 sprintf(szBuf, "%s:obj%d:%08xh", getName(), objNr, offset); 308 iLen = min(strlen(szBuf), ulNameBufferLength); 311 309 } 312 310 313 memcpy(pszNameBuffer, szBuf 2, iLen);311 memcpy(pszNameBuffer, szBuf, iLen); 314 312 pszNameBuffer[iLen] = 0; // terminate the string in any case 313 *pulSymbolOffset = offset - pSymClosest->wSymVal; 315 314 return TRUE; // at least something usable has been found! 316 315 } … … 386 385 387 386 388 BOOL SymbolFilePool::getSymbolName(PSZ pszModule, 389 ULONG objNr, 390 ULONG offset, 391 PSZ pszNameBuffer, 392 ULONG ulNameBufferLength) 387 BOOL SymbolFilePool::getSymbolName(PSZ pszModule, 388 ULONG objNr, 389 ULONG offset, 390 PSZ pszNameBuffer, 391 ULONG ulNameBufferLength, 392 PULONG pulSymbolOffset) 393 393 { 394 394 LXSymbolFile* pSym = (LXSymbolFile*)pHashModules->getElement(pszModule); … … 421 421 offset, 422 422 pszNameBuffer, 423 ulNameBufferLength); 423 ulNameBufferLength, 424 pulSymbolOffset); 424 425 425 426 if (rc == TRUE) … … 433 434 name->Text(), 434 435 ulNameBufferLength); 435 436 436 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); 437 450 } 438 451 }
Note:
See TracChangeset
for help on using the changeset viewer.