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

Method GetStructMemberOffset

PdbParser/SymbolHandler.cpp:112–151  ·  view source on GitHub ↗

https://www.cnblogs.com/M-Mr/p/3970003.html

Source from the content-addressed store, hash-verified

110
111// https://www.cnblogs.com/M-Mr/p/3970003.html
112DWORD SymbolHandler::GetStructMemberOffset(std::string name,std::string memberName) {
113 DWORD offset = -1;
114
115 auto symbol = std::make_unique<SymbolInfo>();
116 auto info = symbol->GetSymbolInfo();
117 SymGetTypeFromName(m_hProcess, _address, name.c_str(), symbol->GetSymbolInfo());
118
119 ULONG childrenCount = 0;
120 SymGetTypeInfo(m_hProcess, _address, info->TypeIndex, TI_GET_CHILDRENCOUNT, &childrenCount);
121 TI_FINDCHILDREN_PARAMS* childrenParams = (TI_FINDCHILDREN_PARAMS*)malloc(sizeof(TI_FINDCHILDREN_PARAMS) + sizeof(ULONG) * childrenCount);
122 if (childrenParams == nullptr) {
123 return offset;
124 }
125 childrenParams->Count = childrenCount;
126 childrenParams->Start = 0;
127 PSYMBOL_INFO pMemberInfo = (PSYMBOL_INFO)malloc((sizeof(SYMBOL_INFO) +
128 MAX_SYM_NAME * sizeof(TCHAR) +
129 sizeof(ULONG64) - 1) /
130 sizeof(ULONG64));
131 if (pMemberInfo == nullptr) {
132 return offset;
133 }
134 pMemberInfo->SizeOfStruct = sizeof(SYMBOL_INFO);
135 pMemberInfo->MaxNameLen = MAX_SYM_NAME;
136 SymGetTypeInfo(m_hProcess, _address, info->TypeIndex, TI_FINDCHILDREN, childrenParams);
137
138 for (ULONG i = 0; i < childrenParams->Count; i++) {
139 ULONG child = childrenParams->ChildId[i];
140 SymFromIndex(m_hProcess, _address, child, pMemberInfo);
141 if (!::strcmp(pMemberInfo->Name, memberName.c_str())) {
142 SymGetTypeInfo(m_hProcess, _address, child, TI_GET_OFFSET, &offset);
143 break;
144 }
145 }
146
147 free(pMemberInfo);
148 free(childrenParams);
149
150 return offset;
151}
152
153DWORD64 SymbolHandler::LoadKernelModule(DWORD64 address) {
154 auto size = 1 << 20;

Callers 2

Calls 1

GetSymbolInfoMethod · 0.45

Tested by

no test coverage detected