Platform base class.
This should be subclassed when creating a new platform
Public Member Functions | |
Platform (BNPlatform *platform) | |
Ref< Architecture > | GetArchitecture () const |
Get the Architecture for this platform. | |
std::string | GetName () const |
Get the name of this platform. | |
Ref< CallingConvention > | GetDefaultCallingConvention () const |
Get the default calling convention for this platform. | |
Ref< CallingConvention > | GetCdeclCallingConvention () const |
Get the cdecl CallingConvention. | |
Ref< CallingConvention > | GetStdcallCallingConvention () const |
Get the stdcall CallingConvention. | |
Ref< CallingConvention > | GetFastcallCallingConvention () const |
Get the fastcall CallingConvention. | |
std::vector< Ref< CallingConvention > > | GetCallingConventions () const |
Get the list of registered calling conventions. | |
Ref< CallingConvention > | GetSystemCallConvention () 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< Type > | GetGlobalRegisterType (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< Platform > | GetRelatedPlatform (Architecture *arch) |
void | AddRelatedPlatform (Architecture *arch, Platform *platform) |
std::vector< Ref< Platform > > | GetRelatedPlatforms () |
Get the list of related platforms for this platform. | |
Ref< Platform > | GetAssociatedPlatformByAddress (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, QualifiedNameAndType > | GetSystemCalls () |
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< Type > | GetTypeByName (const QualifiedName &name) |
Ref< Type > | GetVariableByName (const QualifiedName &name) |
Ref< Type > | GetFunctionByName (const QualifiedName &name, bool exactMatch=false) |
std::string | GetSystemCallName (uint32_t n) |
Ref< Type > | GetSystemCallType (uint32_t n) |
std::string | GenerateAutoPlatformTypeId (const QualifiedName &name) |
Ref< NamedTypeReference > | GenerateAutoPlatformTypeReference (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 () |
BNPlatform * | GetObject () 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< Platform > | GetByName (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 BNPlatform * | GetObject (CoreRefCountObject *obj) |
static BNPlatform * | GetObject (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 BNType * | GetGlobalRegisterTypeCallback (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 |
BNPlatform * | m_object |
|
protected |
|
protected |
Platform::Platform | ( | BNPlatform * | platform | ) |
|
staticprotected |
|
staticprotected |
|
staticprotected |
|
staticprotected |
|
staticprotected |
|
staticprotected |
|
staticprotected |
|
staticprotected |
Ref< Architecture > Platform::GetArchitecture | ( | ) | const |
Get the Architecture for this platform.
string Platform::GetName | ( | ) | const |
Get the name of this platform.
|
static |
Get a platform by name.
name | Name of the platform to retrieve |
Get the list of registered platforms.
|
static |
Get the list of registered platforms by Architecture.
arch | Architecture to get the registered platforms for |
|
static |
Get the list of registered platforms by os.
os | OS to get the registered platforms for |
|
static |
Get the list of registered platforms by OS and Architecture.
os | OS to get the registered platforms for |
arch | Architecture to get the registered platforms for |
|
static |
Get the list of operating systems.
Ref< CallingConvention > Platform::GetDefaultCallingConvention | ( | ) | const |
Get the default calling convention for this platform.
Ref< CallingConvention > Platform::GetCdeclCallingConvention | ( | ) | const |
Get the cdecl CallingConvention.
Ref< CallingConvention > Platform::GetStdcallCallingConvention | ( | ) | const |
Get the stdcall CallingConvention.
Ref< CallingConvention > Platform::GetFastcallCallingConvention | ( | ) | const |
Get the fastcall CallingConvention.
vector< Ref< CallingConvention > > Platform::GetCallingConventions | ( | ) | const |
Get the list of registered calling conventions.
Ref< CallingConvention > Platform::GetSystemCallConvention | ( | ) | const |
Get the syscall calling convention.
void Platform::RegisterCallingConvention | ( | CallingConvention * | cc | ) |
Register a Calling Convention.
cc | Calling Convention to register |
void Platform::RegisterDefaultCallingConvention | ( | CallingConvention * | cc | ) |
Set the default calling convention.
cc | The new default CallingConvention |
void Platform::RegisterCdeclCallingConvention | ( | CallingConvention * | cc | ) |
Set the cdecl calling convention.
cc | The new cdecl CallingConvention |
void Platform::RegisterStdcallCallingConvention | ( | CallingConvention * | cc | ) |
Set the stdcall calling convention.
cc | The new stdcall CallingConvention |
void Platform::RegisterFastcallCallingConvention | ( | CallingConvention * | cc | ) |
Set the fastcall calling convention.
cc | The new fastcall calling convention |
void Platform::SetSystemCallConvention | ( | CallingConvention * | cc | ) |
Set the syscall calling convention.
cc | The new syscall calling convention |
|
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.
view | BinaryView that was just set to this Platform |
|
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.
Get the type of a global register.
Called by analysis when the incoming register value of a global register is observed.
reg | The register being queried for type information. |
Reimplemented in BinaryNinja::CorePlatform.
|
virtual |
Modify the input passed to the Type Parser with Platform-specific features.
[in] | parser | Type Parser instance |
[in,out] | arguments | Arguments to the type parser |
[in,out] | sourceFiles | Source file names and contents |
Reimplemented in BinaryNinja::CorePlatform.
|
virtual |
Provide an option for platforms to decide whether to use the fallback type library.
Allows the Platform to override it to false.
Ref< Platform > Platform::GetRelatedPlatform | ( | Architecture * | arch | ) |
void Platform::AddRelatedPlatform | ( | Architecture * | arch, |
Platform * | platform ) |
Get the list of related platforms for this platform.
map< QualifiedName, Ref< Type > > Platform::GetTypes | ( | ) |
map< QualifiedName, Ref< Type > > Platform::GetVariables | ( | ) |
map< QualifiedName, Ref< Type > > Platform::GetFunctions | ( | ) |
map< uint32_t, QualifiedNameAndType > Platform::GetSystemCalls | ( | ) |
System calls for this platform.
vector< Ref< TypeLibrary > > Platform::GetTypeLibraries | ( | ) |
vector< Ref< TypeLibrary > > Platform::GetTypeLibrariesByName | ( | const std::string & | name | ) |
TypeContainer Platform::GetTypeContainer | ( | ) |
Ref< Type > Platform::GetTypeByName | ( | const QualifiedName & | name | ) |
Ref< Type > Platform::GetVariableByName | ( | const QualifiedName & | name | ) |
Ref< Type > Platform::GetFunctionByName | ( | const QualifiedName & | name, |
bool | exactMatch = false ) |
string Platform::GetSystemCallName | ( | uint32_t | n | ) |
string Platform::GenerateAutoPlatformTypeId | ( | const QualifiedName & | name | ) |
Ref< NamedTypeReference > Platform::GenerateAutoPlatformTypeReference | ( | BNNamedTypeReferenceClass | cls, |
const QualifiedName & | name ) |
string Platform::GetAutoPlatformTypeIdSource | ( | ) |
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``.
source | Source string to be parsed |
fileName | Source Filename |
types | map reference that Types will be copied into |
variables | map reference that variables will be copied into |
functions | map reference that functions will be copied into |
errors | string reference that any errors will be copied into |
includeDirs | optional list of directories to include for header searches |
autoTypeSource | optional source of types if used for automatically generated types |
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``.
fileName | Source Filename |
types | map reference that Types will be copied into |
variables | map reference that variables will be copied into |
functions | map reference that functions will be copied into |
errors | string reference that any errors will be copied into |
includeDirs | optional list of directories to include for header searches |
autoTypeSource | optional source of types if used for automatically generated types |