@@ -216,6 +216,55 @@ def calling_conventions(self):
216216 core .BNFreeCallingConventionList (cc , count .value )
217217 return result
218218
219+ @property
220+ def types (self ):
221+ """List of platform-specific types (read-only)"""
222+ count = ctypes .c_ulonglong (0 )
223+ type_list = core .BNGetPlatformTypes (self .handle , count )
224+ result = {}
225+ for i in xrange (0 , count .value ):
226+ name = types .QualifiedName ._from_core_struct (type_list [i ].name )
227+ result [name ] = types .Type (core .BNNewTypeReference (type_list [i ].type ))
228+ core .BNFreeTypeList (type_list , count .value )
229+ return result
230+
231+ @property
232+ def variables (self ):
233+ """List of platform-specific variable definitions (read-only)"""
234+ count = ctypes .c_ulonglong (0 )
235+ type_list = core .BNGetPlatformVariables (self .handle , count )
236+ result = {}
237+ for i in xrange (0 , count .value ):
238+ name = types .QualifiedName ._from_core_struct (type_list [i ].name )
239+ result [name ] = types .Type (core .BNNewTypeReference (type_list [i ].type ))
240+ core .BNFreeTypeList (type_list , count .value )
241+ return result
242+
243+ @property
244+ def functions (self ):
245+ """List of platform-specific function definitions (read-only)"""
246+ count = ctypes .c_ulonglong (0 )
247+ type_list = core .BNGetPlatformFunctions (self .handle , count )
248+ result = {}
249+ for i in xrange (0 , count .value ):
250+ name = types .QualifiedName ._from_core_struct (type_list [i ].name )
251+ result [name ] = types .Type (core .BNNewTypeReference (type_list [i ].type ))
252+ core .BNFreeTypeList (type_list , count .value )
253+ return result
254+
255+ @property
256+ def system_calls (self ):
257+ """List of system calls for this platform (read-only)"""
258+ count = ctypes .c_ulonglong (0 )
259+ call_list = core .BNGetPlatformSystemCalls (self .handle , count )
260+ result = {}
261+ for i in xrange (0 , count .value ):
262+ name = types .QualifiedName ._from_core_struct (call_list [i ].name )
263+ t = types .Type (core .BNNewTypeReference (call_list [i ].type ))
264+ result [call_list [i ].number ] = (name , t )
265+ core .BNFreeSystemCallList (call_list , count .value )
266+ return result
267+
219268 def __setattr__ (self , name , value ):
220269 try :
221270 object .__setattr__ (self , name , value )
@@ -261,6 +310,36 @@ def get_associated_platform_by_address(self, addr):
261310 result = core .BNGetAssociatedPlatformByAddress (self .handle , new_addr )
262311 return Platform (None , handle = result ), new_addr .value
263312
313+ def get_type_by_name (self , name ):
314+ name = types .QualifiedName (name )._get_core_struct ()
315+ obj = core .BNGetPlatformTypeByName (self .handle , name )
316+ if not obj :
317+ return None
318+ return types .Type (obj )
319+
320+ def get_variable_by_name (self , name ):
321+ name = types .QualifiedName (name )._get_core_struct ()
322+ obj = core .BNGetPlatformVariableByName (self .handle , name )
323+ if not obj :
324+ return None
325+ return types .Type (obj )
326+
327+ def get_function_by_name (self , name ):
328+ name = types .QualifiedName (name )._get_core_struct ()
329+ obj = core .BNGetPlatformFunctionByName (self .handle , name )
330+ if not obj :
331+ return None
332+ return types .Type (obj )
333+
334+ def get_system_call_name (self , number ):
335+ return core .BNGetPlatformSystemCallName (self .handle , number )
336+
337+ def get_system_call_type (self , number ):
338+ obj = core .BNGetPlatformSystemCallType (self .handle , number )
339+ if not obj :
340+ return None
341+ return types .Type (obj )
342+
264343 def generate_auto_platform_type_id (self , name ):
265344 name = types .QualifiedName (name )._get_core_struct ()
266345 return core .BNGenerateAutoPlatformTypeId (self .handle , name )
0 commit comments