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

Method Md1romView

view/md1rom/md1rom.cpp:17–82  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

15
16
17Md1romView::Md1romView(BinaryNinja::BinaryView* data, bool parseOnly): BinaryView("MD1Rom", data->GetFile(), data),
18 m_parseOnly(parseOnly)
19{
20 (void)m_parseOnly;
21
22 CreateLogger("BinaryView");
23 m_logger = CreateLogger("BinaryView.MD1RomView");
24
25 BinaryReader reader(data);
26 uint64_t offset = 0;
27 try
28 {
29 while (true)
30 {
31 Md1romSegment seg;
32 reader.Seek(offset);
33 seg.magic = reader.Read32();
34 seg.length = reader.Read32();
35 DataBuffer name = reader.Read(0x20);
36 size_t nameLen = name.GetData() ? strlen((char*)name.GetData()) : 0;
37 if (nameLen)
38 seg.name = std::string((char*)name.GetData(), nameLen);
39
40 seg.addr = reader.Read32();
41 seg.mode = reader.Read32();
42 seg.magic2 = reader.Read32();
43 seg.offset = reader.Read32();
44 seg.headerStart = offset;
45 seg.dataStart = offset + seg.offset;
46
47 if ((seg.magic != MAGIC_1) || (seg.magic2 != MAGIC_2))
48 break;
49
50 m_segments.emplace_back(seg);
51 m_logger->LogDebug("segment: %s, offset: 0x%x, length: 0x%x, addr: 0x%x, file offset: 0x%llx",
52 seg.name.c_str(), seg.offset, seg.length, seg.addr, offset);
53
54 if (seg.name == "md1rom")
55 {
56 m_mainRomFound = true;
57 m_mainRom = seg;
58 }
59 else if (seg.name == "md1_dbginfo")
60 {
61 m_dbgInfoFound = true;
62 m_dbgInfoSeg = seg;
63 }
64 else if (seg.name == "md1_mddb")
65 {
66 m_dbgDbFound = true;
67 m_dbgDatabaseSeg = seg;
68 }
69
70 offset += (seg.length + seg.offset);
71 if (offset % 0x10 != 0)
72 offset = offset - offset % 0x10 + 0x10;
73
74 if (offset >= data->GetLength())

Callers

nothing calls this directly

Calls 9

LogDebugMethod · 0.80
c_strMethod · 0.80
LogWarnMethod · 0.80
GetFileMethod · 0.45
SeekMethod · 0.45
Read32Method · 0.45
ReadMethod · 0.45
GetDataMethod · 0.45
GetLengthMethod · 0.45

Tested by

no test coverage detected