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

Method Init

view/macho/machoview.cpp:1063–1547  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1061
1062
1063bool MachoView::Init()
1064{
1065 Ref<Settings> settings = GetLoadSettings(GetTypeName());
1066 std::chrono::steady_clock::time_point startTime = std::chrono::steady_clock::now();
1067 BinaryReader reader(GetParentView());
1068 reader.SetEndianness(m_endian);
1069 reader.SetVirtualBase(m_universalImageOffset);
1070 BinaryReader virtualReader(this);
1071 virtualReader.SetEndianness(m_endian);
1072
1073 uint64_t initialImageBase = 0;
1074 bool initialImageBaseSet = false;
1075 string preferredImageBaseDesc;
1076 for (const auto& i : m_header.segments)
1077 {
1078 if ((i.initprot == MACHO_VM_PROT_NONE) || (!i.vmsize))
1079 continue;
1080
1081 if (!initialImageBaseSet)
1082 {
1083 initialImageBase = i.vmaddr;
1084 initialImageBaseSet = true;
1085 preferredImageBaseDesc = i.segname;
1086 }
1087 else if (i.vmaddr < initialImageBase)
1088 {
1089 initialImageBase = i.vmaddr;
1090 preferredImageBaseDesc = i.segname;
1091 }
1092 }
1093
1094 SetOriginalImageBase(initialImageBase);
1095 uint64_t preferredImageBase = initialImageBase;
1096 bool platformSetByUser = false;
1097 if (settings)
1098 {
1099 if (settings->Contains("loader.imageBase"))
1100 preferredImageBase = settings->Get<uint64_t>("loader.imageBase", this);
1101
1102 if (settings->Contains("loader.platform"))
1103 {
1104 BNSettingsScope scope = SettingsAutoScope;
1105 Ref<Platform> platform = Platform::GetByName(settings->Get<string>("loader.platform", this, &scope));
1106 if (platform)
1107 {
1108 m_plat = platform;
1109 m_arch = platform->GetArchitecture();
1110 platformSetByUser = (scope == SettingsResourceScope);
1111 }
1112 }
1113 }
1114
1115 m_imageBaseAdjustment = 0;
1116 if (!initialImageBase)
1117 m_imageBaseAdjustment = preferredImageBase;
1118 else if (initialImageBase <= preferredImageBase)
1119 m_imageBaseAdjustment = preferredImageBase - initialImageBase;
1120 else

Callers 1

Calls 14

EnumerationTypeClass · 0.85
IntegerTypeClass · 0.85
StructureTypeClass · 0.85
ArrayTypeClass · 0.85
SetVirtualBaseMethod · 0.80
Get<uint64_t>Method · 0.80
Get<string>Method · 0.80
AddMemberMethod · 0.80
LogInfoMethod · 0.80
SetEndiannessMethod · 0.45
ContainsMethod · 0.45
GetArchitectureMethod · 0.45

Tested by

no test coverage detected