MCPcopy Create free account
hub / github.com/beefytech/Beef / ParseHotTargetSections

Method ParseHotTargetSections

IDEHelper/DbgModule.cpp:5159–5266  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

5157}
5158
5159void DbgModule::ParseHotTargetSections(DataStream* stream, addr_target* resolvedSymbolAddrs)
5160{
5161 auto mainModule = mDebugTarget->mTargetBinary;
5162 mainModule->ParseSymbolData();
5163
5164 String name;
5165 for (int sectNum = 0; sectNum < (int)mHotTargetSections.size(); sectNum++)
5166 {
5167 if (mHotTargetSections[sectNum] != NULL)
5168 {
5169 DbgHotTargetSection* hotTargetSection = mHotTargetSections[sectNum];
5170 stream->SetPos(hotTargetSection->mPointerToRelocations);
5171 for (int relocIdx = 0; relocIdx < hotTargetSection->mNumberOfRelocations; relocIdx++)
5172 {
5173 COFFRelocation coffReloc;
5174 stream->Read(&coffReloc, sizeof(COFFRelocation));
5175
5176 PE_SymInfo* symInfo = (PE_SymInfo*)&mSymbolData[coffReloc.mSymbolTableIndex * 18];
5177
5178 bool isStaticSymbol = symInfo->mStorageClass == COFF_SYM_CLASS_STATIC;
5179
5180 if (symInfo->mNameOfs[0] != 0)
5181 {
5182 if (symInfo->mName[7] != 0)
5183 {
5184 // Name is exactly 8 chars, not null terminated yet
5185 name = String(symInfo->mName, symInfo->mName + 8);
5186 }
5187 else
5188 name = symInfo->mName;
5189 }
5190 else
5191 name = mStringTable + symInfo->mNameOfs[1];
5192
5193 bool didNameMatch = false;
5194
5195 addr_target resolvedSymbolAddr = resolvedSymbolAddrs[coffReloc.mSymbolTableIndex];
5196
5197#ifdef BF_DBG_32
5198 bool needsSymbolAddr = (coffReloc.mType == IMAGE_REL_I386_DIR32) || (coffReloc.mType == IMAGE_REL_I386_REL32) || (coffReloc.mType == IMAGE_REL_I386_SECREL) || (coffReloc.mType == IMAGE_REL_I386_SECTION);
5199 if (name[0] == '_')
5200 name.Remove(0, 1);
5201#else
5202 bool needsSymbolAddr = (coffReloc.mType == IMAGE_REL_AMD64_ADDR64) || (coffReloc.mType == IMAGE_REL_AMD64_ADDR32) || (coffReloc.mType == IMAGE_REL_AMD64_ADDR32NB) ||
5203 ((coffReloc.mType >= IMAGE_REL_AMD64_REL32) || (coffReloc.mType <= IMAGE_REL_AMD64_REL32_5));
5204#endif
5205
5206 bool isHsPrev = false;
5207 if (name.StartsWith("bf_hs_prev@"))
5208 {
5209 isHsPrev = true;
5210 name.Remove(0, 11);
5211 }
5212
5213 bool deferResolve = false;
5214
5215 if ((resolvedSymbolAddr == 0) && (needsSymbolAddr))
5216 {

Callers

nothing calls this directly

Calls 10

StringClass · 0.85
ParseSymbolDataMethod · 0.45
sizeMethod · 0.45
SetPosMethod · 0.45
ReadMethod · 0.45
RemoveMethod · 0.45
StartsWithMethod · 0.45
FindMethod · 0.45
c_strMethod · 0.45
AllocMethod · 0.45

Tested by

no test coverage detected