SYMCVT.C
资源名称:MSDN_VC98.zip [点击查看]
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:3k
源码类别:
Windows编程
开发平台:
Visual C++
- /*++
- Copyright 1996 - 1997 Microsoft Corporation
- Module Name:
- symcvt.c
- Abstract:
- This module is the shell for the SYMCVT DLL. The DLL's purpose is
- to convert the symbols for the specified image. The resulting
- debug data must conform to the CODEVIEW spec.
- Currently this DLL converts COFF symbols and C7/C8 MAPTOSYM SYM files.
- Author:
- Wesley A. Witt (wesw) 19-April-1993
- Environment:
- Win32, User Mode
- --*/
- #include <windows.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <string.h>
- #define _SYMCVT_SOURCE_
- #include "symcvt.h"
- PUCHAR
- ConvertSymbolsForImage(
- HANDLE hFile,
- char * fname
- )
- /*++
- Routine Description:
- Calls the appropriate conversion routine based on the file contents.
- Arguments:
- hFile - file handle for the image (may be NULL)
- fname - file name for the image (may not have correct path)
- Return Value:
- NULL - could not convert the symbols
- Valid Pointer - a pointer to malloc'ed memory that contains the
- CODEVIEW symbols
- --*/
- {
- POINTERS p;
- char szDrive [_MAX_DRIVE];
- char szDir [_MAX_DIR];
- char szFname [_MAX_FNAME];
- char szExt [_MAX_EXT];
- char szSymName [MAX_PATH];
- PUCHAR rVal;
- if (!MapInputFile( &p, hFile, fname)) {
- rVal = NULL;
- } else if (CalculateNtImagePointers( &p.iptrs )) {
- //
- // we were able to compute the nt image pointers so this must be
- // a nt PE image. now we must decide if there are coff symbols
- // if there are then we do the cofftocv conversion.
- //
- // btw, this is where someone would convert some other type of
- // symbols that are in a nt PE image. (party on garth..)
- //
- // if (!COFF_DIR(&p.iptrs)) {
- if (!p.iptrs.numberOfSymbols) {
- rVal = NULL;
- } else {
- ConvertCoffToCv( &p );
- rVal = p.pCvStart.ptr;
- }
- UnMapInputFile( &p );
- } else {
- UnMapInputFile ( &p );
- _splitpath( fname, szDrive, szDir, szFname, szExt );
- _makepath( szSymName, szDrive, szDir, szFname, "sym" );
- if (!MapInputFile( &p, NULL, szSymName)) {
- rVal = NULL;
- } else {
- //
- // must be a wow/dos app and there is a .sym file so lets to
- // the symtocv conversion
- //
- ConvertSymToCv( &p );
- UnMapInputFile( &p );
- rVal = p.pCvStart.ptr;
- }
- }
- return rVal;
- }