70 {
71 string sBuff;
72 MEMORY_MAPPED_FILE libFile( lpszLibPathName );
73
74
75 if ( FALSE == libFile.IsValid() ) {
79 }
80
81
82
83 PSTR pArchiveStartString = (PSTR)libFile.GetBase();
84
85 if ( 0 != strncmp( pArchiveStartString, IMAGE_ARCHIVE_START, IMAGE_ARCHIVE_START_SIZE ) ) {
88 }
89
90
91
92 PIMAGE_ARCHIVE_MEMBER_HEADER pMbrHdr;
93 pMbrHdr =
MakePtr( PIMAGE_ARCHIVE_MEMBER_HEADER, pArchiveStartString, IMAGE_ARCHIVE_START_SIZE );
94
95
96 PDWORD pcbSymbols = (PDWORD)( pMbrHdr + 1 );
97
98
99
101
102
103
104 PDWORD pMemberOffsets = pcbSymbols + 1;
105
106
107
108 PSTR pszSymbolName =
MakePtr( PSTR, pMemberOffsets, 4 * cSymbols );
109
110
111
112
113 for ( unsigned i = 0; i < cSymbols; i++ ) {
114 DWORD offset;
115
116
117
119
120
121
122
124 string symbol( pszSymbolName );
126 }
127
128
129
130 pMemberOffsets++;
131 pszSymbolName += strlen( pszSymbolName ) + 1;
132 }
134}
#define MakePtr(cast, ptr, addValue)
std::string m_strErrorMsg
BOOL IsRegularLibSymbol(PSTR pszSymbolName)
BOOL IsFiltedSymbol(std::string &pszSymbolName)
DWORD ConvertBigEndian(DWORD bigEndian)