Loading...
Searching...
No Matches
BinaryNinja::Platform Class Reference

Platform base class. More...

Detailed Description

Platform base class.

This should be subclassed when creating a new platform

Public Member Functions

 Platform (BNPlatform *platform)
 
Ref< ArchitectureGetArchitecture () const
 Get the Architecture for this platform.
 
std::string GetName () const
 Get the name of this platform.
 
Ref< CallingConventionGetDefaultCallingConvention () const
 Get the default calling convention for this platform.
 
Ref< CallingConventionGetCdeclCallingConvention () const
 Get the cdecl CallingConvention.
 
Ref< CallingConventionGetStdcallCallingConvention () const
 Get the stdcall CallingConvention.
 
Ref< CallingConventionGetFastcallCallingConvention () const
 Get the fastcall CallingConvention.
 
std::vector< Ref< CallingConvention > > GetCallingConventions () const
 Get the list of registered calling conventions.
 
Ref< CallingConventionGetSystemCallConvention () const
 Get the syscall calling convention.
 
void RegisterCallingConvention (CallingConvention *cc)
 Register a Calling Convention.
 
void RegisterDefaultCallingConvention (CallingConvention *cc)
 Set the default calling convention.
 
void RegisterCdeclCallingConvention (CallingConvention *cc)
 Set the cdecl calling convention.
 
void RegisterStdcallCallingConvention (CallingConvention *cc)
 Set the stdcall calling convention.
 
void RegisterFastcallCallingConvention (CallingConvention *cc)
 Set the fastcall calling convention.
 
void SetSystemCallConvention (CallingConvention *cc)
 Set the syscall calling convention.
 
virtual void BinaryViewInit (BinaryView *view)
 Callback that will be called when the platform of a binaryview is set.
 
virtual std::vector< uint32_t > GetGlobalRegisters ()
 Get the global register list for this Platform.
 
virtual Ref< TypeGetGlobalRegisterType (uint32_t reg)
 Get the type of a global register.
 
virtual void AdjustTypeParserInput (Ref< class TypeParser > parser, std::vector< std::string > &arguments, std::vector< std::pair< std::string, std::string > > &sourceFiles)
 Modify the input passed to the Type Parser with Platform-specific features.
 
virtual bool GetFallbackEnabled ()
 Provide an option for platforms to decide whether to use the fallback type library.
 
Ref< PlatformGetRelatedPlatform (Architecture *arch)
 
void AddRelatedPlatform (Architecture *arch, Platform *platform)
 
std::vector< Ref< Platform > > GetRelatedPlatforms ()
 Get the list of related platforms for this platform.
 
Ref< PlatformGetAssociatedPlatformByAddress (uint64_t &addr)
 
std::map< QualifiedName, Ref< Type > > GetTypes ()
 Get the list of platform-specific types.
 
std::map< QualifiedName, Ref< Type > > GetVariables ()
 Get the list of platform-specific variable definitions.
 
std::map< QualifiedName, Ref< Type > > GetFunctions ()
 Get the list of platform-specific function definitions.
 
std::map< uint32_t, QualifiedNameAndTypeGetSystemCalls ()
 System calls for this platform.
 
std::vector< Ref< TypeLibrary > > GetTypeLibraries ()
 
std::vector< Ref< TypeLibrary > > GetTypeLibrariesByName (const std::string &name)
 
TypeContainer GetTypeContainer ()
 Type Container for all registered types in the Platform.
 
Ref< TypeGetTypeByName (const QualifiedName &name)
 
Ref< TypeGetVariableByName (const QualifiedName &name)
 
Ref< TypeGetFunctionByName (const QualifiedName &name, bool exactMatch=false)
 
std::string GetSystemCallName (uint32_t n)
 
Ref< TypeGetSystemCallType (uint32_t n)
 
std::string GenerateAutoPlatformTypeId (const QualifiedName &name)
 
Ref< NamedTypeReferenceGenerateAutoPlatformTypeReference (BNNamedTypeReferenceClass cls, const QualifiedName &name)
 
std::string GetAutoPlatformTypeIdSource ()
 
bool ParseTypesFromSource (const std::string &source, const std::string &fileName, std::map< QualifiedName, Ref< Type > > &types, std::map< QualifiedName, Ref< Type > > &variables, std::map< QualifiedName, Ref< Type > > &functions, std::string &errors, const std::vector< std::string > &includeDirs=std::vector< std::string >(), const std::string &autoTypeSource="")
 Parses the source string and any needed headers searching for them in the optional list of directories provided in ``includeDirs``.
 
bool ParseTypesFromSourceFile (const std::string &fileName, std::map< QualifiedName, Ref< Type > > &types, std::map< QualifiedName, Ref< Type > > &variables, std::map< QualifiedName, Ref< Type > > &functions, std::string &errors, const std::vector< std::string > &includeDirs=std::vector< std::string >(), const std::string &autoTypeSource="")
 Parses the source string and any needed headers searching for them in the optional list of directories provided in ``includeDirs``.
 
- Public Member Functions inherited from BinaryNinja::CoreRefCountObject< BNPlatform, BNNewPlatformReference, BNFreePlatform >
 CoreRefCountObject ()
 
virtual ~CoreRefCountObject ()
 
BNPlatformGetObject () const
 
void AddRef ()
 
void Release ()
 
void AddRefForRegistration ()
 
void ReleaseForRegistration ()
 
void AddRefForCallback ()
 
void ReleaseForCallback ()
 

Static Public Member Functions

static void Register (const std::string &os, Platform *platform)
 Register a Platform.
 
static Ref< PlatformGetByName (const std::string &name)
 Get a platform by name.
 
static std::vector< Ref< Platform > > GetList ()
 Get the list of registered platforms.
 
static std::vector< Ref< Platform > > GetList (Architecture *arch)
 Get the list of registered platforms by Architecture.
 
static std::vector< Ref< Platform > > GetList (const std::string &os)
 Get the list of registered platforms by os.
 
static std::vector< Ref< Platform > > GetList (const std::string &os, Architecture *arch)
 Get the list of registered platforms by OS and Architecture.
 
static std::vector< std::string > GetOSList ()
 Get the list of operating systems.
 
- Static Public Member Functions inherited from BinaryNinja::CoreRefCountObject< BNPlatform, BNNewPlatformReference, BNFreePlatform >
static BNPlatformGetObject (CoreRefCountObject *obj)
 
static BNPlatformGetObject (const CoreRefCountObject *obj)
 

Protected Member Functions

 Platform (Architecture *arch, const std::string &name)
 
 Platform (Architecture *arch, const std::string &name, const std::string &typeFile, const std::vector< std::string > &includeDirs=std::vector< std::string >())
 

Static Protected Member Functions

static void InitCallback (void *ctxt, BNPlatform *)
 
static void InitViewCallback (void *ctxt, BNBinaryView *view)
 
static uint32_t * GetGlobalRegistersCallback (void *ctxt, size_t *count)
 
static void FreeRegisterListCallback (void *ctxt, uint32_t *regs, size_t count)
 
static BNTypeGetGlobalRegisterTypeCallback (void *ctxt, uint32_t reg)
 
static void AdjustTypeParserInputCallback (void *ctxt, BNTypeParser *parser, const char *const *argumentsIn, size_t argumentsLenIn, const char *const *sourceFileNamesIn, const char *const *sourceFileValuesIn, size_t sourceFilesLenIn, char ***argumentsOut, size_t *argumentsLenOut, char ***sourceFileNamesOut, char ***sourceFileValuesOut, size_t *sourceFilesLenOut)
 
static void FreeTypeParserInputCallback (void *ctxt, char **arguments, size_t argumentsLen, char **sourceFileNames, char **sourceFileValues, size_t sourceFilesLen)
 
static bool GetFallbackEnabledCallback (void *ctxt)
 

Additional Inherited Members

- Public Attributes inherited from BinaryNinja::CoreRefCountObject< BNPlatform, BNNewPlatformReference, BNFreePlatform >
std::atomic< int > m_refs
 
bool m_registeredRef
 
BNPlatformm_object
 

Constructor & Destructor Documentation

◆ Platform() [1/3]

BinaryNinja::Platform::Platform ( Architecture * arch,
const std::string & name )
protected

◆ Platform() [2/3]

BinaryNinja::Platform::Platform ( Architecture * arch,
const std::string & name,
const std::string & typeFile,
const std::vector< std::string > & includeDirs = std::vector< std::string >() )
protected

◆ Platform() [3/3]

Platform::Platform ( BNPlatform * platform)

Member Function Documentation

◆ InitCallback()

void Platform::InitCallback ( void * ctxt,
BNPlatform * plat )
staticprotected

◆ InitViewCallback()

void Platform::InitViewCallback ( void * ctxt,
BNBinaryView * view )
staticprotected

◆ GetGlobalRegistersCallback()

uint32_t * Platform::GetGlobalRegistersCallback ( void * ctxt,
size_t * count )
staticprotected

◆ FreeRegisterListCallback()

void Platform::FreeRegisterListCallback ( void * ctxt,
uint32_t * regs,
size_t count )
staticprotected

◆ GetGlobalRegisterTypeCallback()

BNType * Platform::GetGlobalRegisterTypeCallback ( void * ctxt,
uint32_t reg )
staticprotected

◆ AdjustTypeParserInputCallback()

void Platform::AdjustTypeParserInputCallback ( void * ctxt,
BNTypeParser * parser,
const char *const * argumentsIn,
size_t argumentsLenIn,
const char *const * sourceFileNamesIn,
const char *const * sourceFileValuesIn,
size_t sourceFilesLenIn,
char *** argumentsOut,
size_t * argumentsLenOut,
char *** sourceFileNamesOut,
char *** sourceFileValuesOut,
size_t * sourceFilesLenOut )
staticprotected

◆ FreeTypeParserInputCallback()

void Platform::FreeTypeParserInputCallback ( void * ctxt,
char ** arguments,
size_t argumentsLen,
char ** sourceFileNames,
char ** sourceFileValues,
size_t sourceFilesLen )
staticprotected

◆ GetFallbackEnabledCallback()

bool Platform::GetFallbackEnabledCallback ( void * ctxt)
staticprotected

◆ GetArchitecture()

Ref< Architecture > Platform::GetArchitecture ( ) const

Get the Architecture for this platform.

Returns
The platform architecture

◆ GetName()

string Platform::GetName ( ) const

Get the name of this platform.

Returns
The platform namee

◆ Register()

void Platform::Register ( const std::string & os,
Platform * platform )
static

Register a Platform.

Parameters
osOS for the platform to register
platformPlatform to register

◆ GetByName()

Ref< Platform > Platform::GetByName ( const std::string & name)
static

Get a platform by name.

Parameters
nameName of the platform to retrieve
Returns
The Platform, if it exists

◆ GetList() [1/4]

vector< Ref< Platform > > Platform::GetList ( )
static

Get the list of registered platforms.

Returns
The list of registered platforms

◆ GetList() [2/4]

vector< Ref< Platform > > Platform::GetList ( Architecture * arch)
static

Get the list of registered platforms by Architecture.

Parameters
archArchitecture to get the registered platforms for
Returns
The list of registered platforms by Architecture

◆ GetList() [3/4]

static std::vector< Ref< Platform > > BinaryNinja::Platform::GetList ( const std::string & os)
static

Get the list of registered platforms by os.

Parameters
osOS to get the registered platforms for
Returns
The list of registered platforms by Architecture

◆ GetList() [4/4]

static std::vector< Ref< Platform > > BinaryNinja::Platform::GetList ( const std::string & os,
Architecture * arch )
static

Get the list of registered platforms by OS and Architecture.

Parameters
osOS to get the registered platforms for
archArchitecture to get the registered platforms for
Returns
The list of registered platforms

◆ GetOSList()

vector< std::string > Platform::GetOSList ( )
static

Get the list of operating systems.

Returns
The list of operating systems

◆ GetDefaultCallingConvention()

Ref< CallingConvention > Platform::GetDefaultCallingConvention ( ) const

Get the default calling convention for this platform.

Returns
The default calling convention

◆ GetCdeclCallingConvention()

Ref< CallingConvention > Platform::GetCdeclCallingConvention ( ) const

Get the cdecl CallingConvention.

Returns
The cdecl CallingConvention

◆ GetStdcallCallingConvention()

Ref< CallingConvention > Platform::GetStdcallCallingConvention ( ) const

Get the stdcall CallingConvention.

Returns
The stdcall CallingConvention

◆ GetFastcallCallingConvention()

Ref< CallingConvention > Platform::GetFastcallCallingConvention ( ) const

Get the fastcall CallingConvention.

Returns
The fastcall Calling Convention

◆ GetCallingConventions()

vector< Ref< CallingConvention > > Platform::GetCallingConventions ( ) const

Get the list of registered calling conventions.

Returns
The list of registered calling conventions

◆ GetSystemCallConvention()

Ref< CallingConvention > Platform::GetSystemCallConvention ( ) const

Get the syscall calling convention.

Returns
The syscall CallingConvention

◆ RegisterCallingConvention()

void Platform::RegisterCallingConvention ( CallingConvention * cc)

Register a Calling Convention.

Parameters
ccCalling Convention to register

◆ RegisterDefaultCallingConvention()

void Platform::RegisterDefaultCallingConvention ( CallingConvention * cc)

Set the default calling convention.

Parameters
ccThe new default CallingConvention

◆ RegisterCdeclCallingConvention()

void Platform::RegisterCdeclCallingConvention ( CallingConvention * cc)

Set the cdecl calling convention.

Parameters
ccThe new cdecl CallingConvention

◆ RegisterStdcallCallingConvention()

void Platform::RegisterStdcallCallingConvention ( CallingConvention * cc)

Set the stdcall calling convention.

Parameters
ccThe new stdcall CallingConvention

◆ RegisterFastcallCallingConvention()

void Platform::RegisterFastcallCallingConvention ( CallingConvention * cc)

Set the fastcall calling convention.

Parameters
ccThe new fastcall calling convention

◆ SetSystemCallConvention()

void Platform::SetSystemCallConvention ( CallingConvention * cc)

Set the syscall calling convention.

Parameters
ccThe new syscall calling convention

◆ BinaryViewInit()

void Platform::BinaryViewInit ( BinaryView * view)
virtual

Callback that will be called when the platform of a binaryview is set.

Allows for the Platform to to do platform-specific processing of views just after finalization.

Parameters
viewBinaryView that was just set to this Platform

◆ GetGlobalRegisters()

std::vector< uint32_t > Platform::GetGlobalRegisters ( )
virtual

Get the global register list for this Platform.

Allows the Platform to override the global register list used by analysis.

Reimplemented in BinaryNinja::CorePlatform.

◆ GetGlobalRegisterType()

Ref< Type > Platform::GetGlobalRegisterType ( uint32_t reg)
virtual

Get the type of a global register.

Called by analysis when the incoming register value of a global register is observed.

Parameters
regThe register being queried for type information.

Reimplemented in BinaryNinja::CorePlatform.

◆ AdjustTypeParserInput()

void Platform::AdjustTypeParserInput ( Ref< class TypeParser > parser,
std::vector< std::string > & arguments,
std::vector< std::pair< std::string, std::string > > & sourceFiles )
virtual

Modify the input passed to the Type Parser with Platform-specific features.

Parameters
[in]parserType Parser instance
[in,out]argumentsArguments to the type parser
[in,out]sourceFilesSource file names and contents

Reimplemented in BinaryNinja::CorePlatform.

◆ GetFallbackEnabled()

bool Platform::GetFallbackEnabled ( )
virtual

Provide an option for platforms to decide whether to use the fallback type library.

Allows the Platform to override it to false.

◆ GetRelatedPlatform()

Ref< Platform > Platform::GetRelatedPlatform ( Architecture * arch)

◆ AddRelatedPlatform()

void Platform::AddRelatedPlatform ( Architecture * arch,
Platform * platform )

◆ GetRelatedPlatforms()

std::vector< Ref< Platform > > Platform::GetRelatedPlatforms ( )

Get the list of related platforms for this platform.

Returns
A vector of Ref<Platform>s

◆ GetAssociatedPlatformByAddress()

Ref< Platform > Platform::GetAssociatedPlatformByAddress ( uint64_t & addr)

◆ GetTypes()

map< QualifiedName, Ref< Type > > Platform::GetTypes ( )

Get the list of platform-specific types.

Returns
A map of Platform Type QualifiedNames and Ref<Type>s

◆ GetVariables()

map< QualifiedName, Ref< Type > > Platform::GetVariables ( )

Get the list of platform-specific variable definitions.

Returns
A map of Platform Variable QualifiedNames and Ref<Type>s

◆ GetFunctions()

map< QualifiedName, Ref< Type > > Platform::GetFunctions ( )

Get the list of platform-specific function definitions.

Returns
A map of Platform Function QualifiedNames and Ref<Type>s

◆ GetSystemCalls()

map< uint32_t, QualifiedNameAndType > Platform::GetSystemCalls ( )

System calls for this platform.

Returns
A list of system calls for this platform

◆ GetTypeLibraries()

vector< Ref< TypeLibrary > > Platform::GetTypeLibraries ( )

◆ GetTypeLibrariesByName()

vector< Ref< TypeLibrary > > Platform::GetTypeLibrariesByName ( const std::string & name)

◆ GetTypeContainer()

TypeContainer Platform::GetTypeContainer ( )

Type Container for all registered types in the Platform.

Returns
Platform types Type Container

◆ GetTypeByName()

Ref< Type > Platform::GetTypeByName ( const QualifiedName & name)

◆ GetVariableByName()

Ref< Type > Platform::GetVariableByName ( const QualifiedName & name)

◆ GetFunctionByName()

Ref< Type > Platform::GetFunctionByName ( const QualifiedName & name,
bool exactMatch = false )

◆ GetSystemCallName()

string Platform::GetSystemCallName ( uint32_t n)

◆ GetSystemCallType()

Ref< Type > Platform::GetSystemCallType ( uint32_t n)

◆ GenerateAutoPlatformTypeId()

string Platform::GenerateAutoPlatformTypeId ( const QualifiedName & name)

◆ GenerateAutoPlatformTypeReference()

Ref< NamedTypeReference > Platform::GenerateAutoPlatformTypeReference ( BNNamedTypeReferenceClass cls,
const QualifiedName & name )

◆ GetAutoPlatformTypeIdSource()

string Platform::GetAutoPlatformTypeIdSource ( )

◆ ParseTypesFromSource()

bool Platform::ParseTypesFromSource ( const std::string & source,
const std::string & fileName,
std::map< QualifiedName, Ref< Type > > & types,
std::map< QualifiedName, Ref< Type > > & variables,
std::map< QualifiedName, Ref< Type > > & functions,
std::string & errors,
const std::vector< std::string > & includeDirs = std::vector<std::string>(),
const std::string & autoTypeSource = "" )

Parses the source string and any needed headers searching for them in the optional list of directories provided in ``includeDirs``.

Note
This API does not allow the source to rely on existing types that only exist in a specific view. Use BinaryView->ParseTypeString instead.
Parameters
sourceSource string to be parsed
fileNameSource Filename
typesmap reference that Types will be copied into
variablesmap reference that variables will be copied into
functionsmap reference that functions will be copied into
errorsstring reference that any errors will be copied into
includeDirsoptional list of directories to include for header searches
autoTypeSourceoptional source of types if used for automatically generated types
Returns
true on success, false otherwise

◆ ParseTypesFromSourceFile()

bool Platform::ParseTypesFromSourceFile ( const std::string & fileName,
std::map< QualifiedName, Ref< Type > > & types,
std::map< QualifiedName, Ref< Type > > & variables,
std::map< QualifiedName, Ref< Type > > & functions,
std::string & errors,
const std::vector< std::string > & includeDirs = std::vector<std::string>(),
const std::string & autoTypeSource = "" )

Parses the source string and any needed headers searching for them in the optional list of directories provided in ``includeDirs``.

Note
This API does not allow the source to rely on existing types that only exist in a specific view. Use BinaryView->ParseTypeString instead.
Parameters
fileNameSource Filename
typesmap reference that Types will be copied into
variablesmap reference that variables will be copied into
functionsmap reference that functions will be copied into
errorsstring reference that any errors will be copied into
includeDirsoptional list of directories to include for header searches
autoTypeSourceoptional source of types if used for automatically generated types
Returns
true on success, false otherwise