MCPcopy Create free account
hub / github.com/BeneficialCode/WinArk / GetStructMemberSize

Method GetStructMemberSize

PdbParser/SymbolHandler.cpp:177–218  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

175}
176
177DWORD SymbolHandler::GetStructMemberSize(std::string name, std::string memberName) {
178 DWORD size = 0;
179
180 auto symbol = std::make_unique<SymbolInfo>();
181 auto info = symbol->GetSymbolInfo();
182 SymGetTypeFromName(m_hProcess, _address, name.c_str(), symbol->GetSymbolInfo());
183
184 ULONG childrenCount;
185 SymGetTypeInfo(m_hProcess, _address, info->TypeIndex, TI_GET_CHILDRENCOUNT, &childrenCount);
186 TI_FINDCHILDREN_PARAMS* childrenParams = (TI_FINDCHILDREN_PARAMS*)malloc(sizeof(TI_FINDCHILDREN_PARAMS) + sizeof(ULONG) * childrenCount);
187 if (childrenParams == nullptr) {
188 return size;
189 }
190 childrenParams->Count = childrenCount;
191 childrenParams->Start = 0;
192 PSYMBOL_INFO pMemberInfo = (PSYMBOL_INFO)malloc((sizeof(SYMBOL_INFO) +
193 MAX_SYM_NAME * sizeof(TCHAR) +
194 sizeof(ULONG64) - 1) /
195 sizeof(ULONG64));
196 if (pMemberInfo == nullptr) {
197 free(childrenParams);
198 return size;
199 }
200 pMemberInfo->SizeOfStruct = sizeof(SYMBOL_INFO);
201 pMemberInfo->MaxNameLen = MAX_SYM_NAME;
202 SymGetTypeInfo(m_hProcess, _address, info->TypeIndex, TI_FINDCHILDREN, childrenParams);
203
204 for (ULONG i = 0; i < childrenParams->Count; i++) {
205 ULONG child = childrenParams->ChildId[i];
206 SymFromIndex(m_hProcess, _address, child, pMemberInfo);
207 if (!::strcmp(pMemberInfo->Name, memberName.c_str())) {
208 size = pMemberInfo->Size;
209
210 break;
211 }
212 }
213
214 free(pMemberInfo);
215 free(childrenParams);
216
217 return size;
218}
219
220std::unique_ptr<SymbolInfo> SymbolHandler::GetSymbolFromAddress(DWORD64 address, PDWORD64 offset) {
221 auto symbol = std::make_unique<SymbolInfo>();

Callers 1

Calls 1

GetSymbolInfoMethod · 0.45

Tested by

no test coverage detected