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

Method _to_core_struct

python/variable.py:393–452  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

391 return not (self == other)
392
393 def _to_core_struct(self) -> core.BNPossibleValueSet:
394 result = core.BNPossibleValueSet()
395 result.state = RegisterValueType(self.type)
396 if self.type == RegisterValueType.UndeterminedValue:
397 return result
398 elif self.type == RegisterValueType.ConstantValue:
399 result.value = self.value
400 elif self.type == RegisterValueType.ConstantPointerValue:
401 result.value = self.value
402 elif self.type == RegisterValueType.StackFrameOffset:
403 result.offset = self.value
404 elif self.type & RegisterValueType.ConstantDataValue == RegisterValueType.ConstantDataValue:
405 result.value = self.value
406 result.size = self.size
407 elif self.type == RegisterValueType.SignedRangeValue:
408 result.offset = self.value
409 result.ranges = (core.BNValueRange * self.count)()
410 for i in range(0, self.count):
411 start = self.ranges[i].start
412 end = self.ranges[i].end
413 if start & (1 << 63):
414 start |= ~((1 << 63) - 1)
415 if end & (1 << 63):
416 end |= ~((1 << 63) - 1)
417 value_range = core.BNValueRange()
418 value_range.start = start
419 value_range.end = end
420 value_range.step = self.ranges[i].step
421 result.ranges[i] = value_range
422 result.count = self.count
423 elif self.type == RegisterValueType.UnsignedRangeValue:
424 result.offset = self.value
425 result.ranges = (core.BNValueRange * self.count)()
426 for i in range(0, self.count):
427 value_range = core.BNValueRange()
428 value_range.start = self.ranges[i].start
429 value_range.end = self.ranges[i].end
430 value_range.step = self.ranges[i].step
431 result.ranges[i] = value_range
432 result.count = self.count
433 elif self.type == RegisterValueType.LookupTableValue:
434 result.table = []
435 result.mapping = {}
436 for i in range(self.count):
437 from_list = []
438 for j in range(0, len(self.table[i].from_values)):
439 from_list.append(self.table[i].from_values[j])
440 result.mapping[self.table[i].from_values[j]] = result.table[i].to_value
441 result.table.append(LookupTableEntry(from_list, result.table[i].to_value))
442 result.count = self.count
443 elif (self.type == RegisterValueType.InSetOfValues) or (self.type == RegisterValueType.NotInSetOfValues):
444 values = (ctypes.c_longlong * self.count)()
445 i = 0
446 for value in self.values:
447 values[i] = value
448 i += 1
449 int_ptr = ctypes.POINTER(ctypes.c_longlong)
450 result.valueSet = ctypes.cast(values, int_ptr)

Callers

nothing calls this directly

Calls 2

LookupTableEntryClass · 0.70
appendMethod · 0.45

Tested by

no test coverage detected