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

Function ElfFlagsRecognize

arch/mips/arch_mips.cpp:3220–3247  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

3218
3219
3220static Ref<Platform> ElfFlagsRecognize(BinaryView* view, Metadata* metadata)
3221{
3222 Ref<Metadata> abiMetadata = metadata->Get("EI_OSABI");
3223 if (!abiMetadata || !abiMetadata->IsUnsignedInteger())
3224 return nullptr;
3225
3226 uint64_t abi = abiMetadata->GetUnsignedInteger();
3227 if (abi != 0 && abi != 3)
3228 return nullptr;
3229
3230 Ref<Metadata> flagsMetadata = metadata->Get("e_flags");
3231 if (!flagsMetadata || !flagsMetadata->IsUnsignedInteger())
3232 return nullptr;
3233
3234 uint64_t flagsValue = flagsMetadata->GetUnsignedInteger();
3235 uint8_t machineVariant = (flagsValue >> 16) & 0xff;
3236
3237 switch (machineVariant)
3238 {
3239 case 0x8b: // EF_MIPS_MACH_OCTEON
3240 case 0x8d: // EF_MIPS_MACH_OCTEON2
3241 case 0x8e: // EF_MIPS_MACH_OCTEON3
3242 LogInfo("ELF flags 0x%08" PRIx64 " machine variant 0x%02x: using cavium architecture", flagsValue, machineVariant);
3243 return Platform::GetByName("linux-cnmips64");
3244 default:
3245 return nullptr;
3246 }
3247}
3248
3249extern "C"
3250{

Callers

nothing calls this directly

Calls 3

IsUnsignedIntegerMethod · 0.80
GetUnsignedIntegerMethod · 0.80
GetMethod · 0.45

Tested by

no test coverage detected