MCPcopy Create free account
hub / github.com/Vector35/binaryninja-api / ParseDebugInfo

Method ParseDebugInfo

view/md1rom/md1rom.cpp:245–292  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

243
244
245void Md1romView::ParseDebugInfo()
246{
247 if (!m_dbgInfoFound)
248 return;
249
250 DataBuffer data = GetParentView()->ReadBuffer(m_dbgInfoSeg.dataStart, m_dbgInfoSeg.length);
251 if (data.GetLength() != m_dbgInfoSeg.length)
252 return;
253
254 DataBuffer decompressed;
255 if (!data.LzmaDecompress(decompressed))
256 return;
257
258 m_logger->LogDebug("The size of decompressed buffer: 0x%zx", decompressed.GetLength());
259
260 Ref<FileMetadata> file = new FileMetadata;
261 Ref<BinaryView> view = new BinaryData(file, decompressed);
262 BinaryReader reader(view);
263
264 reader.Seek(0x1c);
265 auto target = reader.ReadCString();
266 auto hardwarePlatform = reader.ReadCString();
267 auto molyVersion = reader.ReadCString();
268 auto buildTime = reader.ReadCString();
269
270 [[maybe_unused]] auto functionSymbolsOffset = reader.Read32() + 0x10;
271 auto fileSymbolsOffset = reader.Read32() + 0x10;
272
273 try
274 {
275 while (true)
276 {
277 Md1DebugSymbol symbol;
278 symbol.name = reader.ReadCString();
279 symbol.start = reader.Read32();
280 symbol.end = reader.Read32();
281 m_debugSymbols.emplace_back(symbol);
282 DefineMd1RomSymbol(FunctionSymbol, symbol.name, symbol.start);
283 if (reader.GetOffset() >= fileSymbolsOffset)
284 break;
285 }
286 }
287 catch(...)
288 {
289 m_logger->LogWarn("exception while parsing debug symbols");
290 }
291 file->Close();
292}
293
294
295void Md1romView::ParseDebugDatabase()

Callers

nothing calls this directly

Calls 10

LzmaDecompressMethod · 0.80
LogDebugMethod · 0.80
LogWarnMethod · 0.80
ReadBufferMethod · 0.45
GetLengthMethod · 0.45
SeekMethod · 0.45
ReadCStringMethod · 0.45
Read32Method · 0.45
GetOffsetMethod · 0.45
CloseMethod · 0.45

Tested by

no test coverage detected