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

Method Init

view/pe/coffview.cpp:69–1378  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

67}
68
69bool COFFView::Init()
70{
71 std::chrono::steady_clock::time_point startTime = std::chrono::steady_clock::now();
72 map<string, size_t> usedSectionNames;
73
74 BinaryReader reader(GetParentView(), LittleEndian);
75 uint64_t entryPointAddress;
76 Ref<Platform> platform;
77
78 Ref<Settings> settings;
79 COFFHeader header;
80 BigObj_COFFHeader header2;
81
82 memset(&header, 0, sizeof(header));
83 memset(&header2, 0, sizeof(header2));
84 size_t sectionIndexSize = sizeof(header.sectionCount);
85 size_t sizeofCOFFSymbol = sizeof(COFFSymbol16);
86 size_t sectionHeadersOffset = sizeof(COFFHeader);
87 uint32_t sectionCount = 0;
88 bool isCLRBinary = false;
89 bool isBigCOFF = false;
90 m_is64 = false;
91 try
92 {
93 // Read COFF header
94 reader.Seek(0);
95 header.machine = reader.Read16();
96
97 if (header.machine == IMAGE_FILE_MACHINE_UNKNOWN)
98 {
99 uint16_t sig2 = reader.Read16();
100 if (sig2 == 0xFFFF)
101 {
102 header2.sig1 = header.machine;
103 header2.sig2 = sig2;
104 sectionIndexSize = sizeof(header2.sectionCount);
105 sizeofCOFFSymbol = sizeof(COFFSymbol32);
106 sectionHeadersOffset = sizeof(BigObj_COFFHeader);
107 header2.version = reader.Read16();
108 header.machine = header2.machine = reader.Read16();
109 header.timestamp = header2.timestamp = reader.Read32();
110 reader.Read(&header2.UUID, sizeof(header2.UUID));
111 if (memcmp(&header2.UUID, BigObjMagic, sizeof(BigObjMagic)) == 0)
112 {
113 m_logger->LogDebug("COFF Header UUID is big object");
114 }
115 else if (memcmp(&header2.UUID, ClGlObjMagic, sizeof(ClGlObjMagic)) == 0)
116 {
117 m_logger->LogError("COFF: header UUID is CL.exe LTO object, no native code to disassemble.");
118 return false;
119 }
120 else
121 {
122 m_logger->LogError("COFF: header UUID unknown, probably COFF import library (unsupported).");
123 return false;
124 }
125 header2.unused1 = reader.Read32();
126 header2.unused2 = reader.Read32();

Callers 1

Calls 15

IntegerTypeClass · 0.85
ArrayTypeClass · 0.85
StructureTypeClass · 0.85
COFFFormatExceptionClass · 0.85
LogDebugMethod · 0.80
LogErrorMethod · 0.80
c_strMethod · 0.80
Get<uint64_t>Method · 0.80
Get<string>Method · 0.80
Get<bool>Method · 0.80
LogWarnMethod · 0.80
push_backMethod · 0.80

Tested by

no test coverage detected