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

Method ProcessObjCData

objectivec/objc.cpp:1263–1462  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1261}
1262
1263void ObjCProcessor::ProcessObjCData()
1264{
1265 m_symbolQueue = new SymbolQueue();
1266 auto addrSize = m_data->GetAddressSize();
1267
1268 m_typeNames.relativePtr = defineTypedef(m_data, {"rptr_t"}, Type::IntegerType(4, true));
1269 auto rptr_t = Type::NamedType(m_data, m_typeNames.relativePtr);
1270
1271 m_typeNames.id = defineTypedef(m_data, {"id"}, Type::PointerType(addrSize, Type::VoidType()));
1272 m_typeNames.sel = defineTypedef(m_data, {"SEL"}, Type::PointerType(addrSize, Type::IntegerType(1, false)));
1273
1274 m_typeNames.BOOL = defineTypedef(m_data, {"BOOL"}, Type::IntegerType(1, false));
1275 m_typeNames.nsInteger = defineTypedef(m_data, {"NSInteger"}, Type::IntegerType(addrSize, true));
1276 m_typeNames.nsuInteger = defineTypedef(m_data, {"NSUInteger"}, Type::IntegerType(addrSize, false));
1277 m_typeNames.cgFloat = defineTypedef(m_data, {"CGFloat"}, Type::FloatType(addrSize));
1278
1279 Ref<Type> relativeSelectorPtr;
1280 auto reader = GetReader();
1281 if (auto objCRelativeMethodsBaseAddr = GetObjCRelativeMethodBaseAddress(reader.get())) {
1282 m_logger->LogDebug("RelativeMethodSelector Base: 0x%llx", objCRelativeMethodsBaseAddr);
1283
1284 auto type = TypeBuilder::PointerType(4, Type::PointerType(addrSize, Type::IntegerType(1, false)))
1285 .SetPointerBase(RelativeToConstantPointerBaseType, objCRelativeMethodsBaseAddr)
1286 .Finalize();
1287 auto relativeSelectorPtrName = defineTypedef(m_data, {"relative_SEL"}, type);
1288 relativeSelectorPtr = Type::NamedType(m_data, relativeSelectorPtrName);
1289 }
1290
1291 // https://github.com/apple-oss-distributions/objc4/blob/196363c165b175ed925ef6b9b99f558717923c47/runtime/objc-abi.h
1292 EnumerationBuilder imageInfoFlagBuilder;
1293 imageInfoFlagBuilder.AddMemberWithValue("IsReplacement", 1 << 0);
1294 imageInfoFlagBuilder.AddMemberWithValue("SupportsGC", 1 << 1);
1295 imageInfoFlagBuilder.AddMemberWithValue("RequiresGC", 1 << 2);
1296 imageInfoFlagBuilder.AddMemberWithValue("OptimizedByDyld", 1 << 3);
1297 imageInfoFlagBuilder.AddMemberWithValue("CorrectedSynthesize", 1 << 4);
1298 imageInfoFlagBuilder.AddMemberWithValue("IsSimulated", 1 << 5);
1299 imageInfoFlagBuilder.AddMemberWithValue("HasCategoryClassProperties", 1 << 6);
1300 imageInfoFlagBuilder.AddMemberWithValue("OptimizedByDyldClosure", 1 << 7);
1301 imageInfoFlagBuilder.AddMemberWithValue("SwiftUnstableVersionMask", 0xff << 8);
1302 imageInfoFlagBuilder.AddMemberWithValue("SwiftStableVersionMask", 0xFFFF << 16);
1303 auto imageInfoFlagType = finalizeEnumerationBuilder(m_data, imageInfoFlagBuilder, 4, {"objc_image_info_flags"});
1304 m_typeNames.imageInfoFlags = imageInfoFlagType.first;
1305
1306 EnumerationBuilder swiftVersionBuilder;
1307 swiftVersionBuilder.AddMemberWithValue("SwiftVersion1", 1);
1308 swiftVersionBuilder.AddMemberWithValue("SwiftVersion1_2", 2);
1309 swiftVersionBuilder.AddMemberWithValue("SwiftVersion2", 3);
1310 swiftVersionBuilder.AddMemberWithValue("SwiftVersion3", 4);
1311 swiftVersionBuilder.AddMemberWithValue("SwiftVersion4", 5);
1312 swiftVersionBuilder.AddMemberWithValue("SwiftVersion4_1", 6); // [sic]
1313 swiftVersionBuilder.AddMemberWithValue("SwiftVersion4_2", 6);
1314 swiftVersionBuilder.AddMemberWithValue("SwiftVersion5", 7);
1315 auto swiftVersionType =
1316 finalizeEnumerationBuilder(m_data, swiftVersionBuilder, 4, {"objc_image_info_swift_version"});
1317 m_typeNames.imageInfoSwiftVersion = swiftVersionType.first;
1318
1319 StructureBuilder imageInfoBuilder;
1320 imageInfoBuilder.AddMember(Type::IntegerType(4, false), "version");

Callers 2

InitializeHeaderMethod · 0.80
ApplyImageMethod · 0.80

Calls 15

defineTypedefFunction · 0.85
IntegerTypeClass · 0.85
PointerTypeClass · 0.85
VoidTypeClass · 0.85
FloatTypeClass · 0.85
finalizeStructureBuilderFunction · 0.85
StructureTypeClass · 0.85
LogDebugMethod · 0.80
AddMemberMethod · 0.80
DefineTypeMethod · 0.80

Tested by

no test coverage detected