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

Class PossibleValueSet

python/variable.py:255–627  ·  view source on GitHub ↗

`class PossibleValueSet` PossibleValueSet is used to define possible values that a variable can take. It contains methods to instantiate different value sets such as Constant, Signed/Unsigned Ranges, etc.

Source from the content-addressed store, hash-verified

253
254@decorators.passive
255class PossibleValueSet:
256 """
257 `class PossibleValueSet` PossibleValueSet is used to define possible values
258 that a variable can take. It contains methods to instantiate different
259 value sets such as Constant, Signed/Unsigned Ranges, etc.
260 """
261 def __init__(self, arch=None, value=None):
262 if value is None:
263 self._type = RegisterValueType.UndeterminedValue
264 return
265 self._type = RegisterValueType(value.state)
266 if value.state == RegisterValueType.EntryValue:
267 if arch is None:
268 self._reg = value.value
269 else:
270 self._reg = arch.get_reg_name(value.value)
271 elif value.state == RegisterValueType.ConstantValue:
272 self._value = value.value
273 elif value.state == RegisterValueType.ConstantPointerValue:
274 self._value = value.value
275 elif value.state == RegisterValueType.StackFrameOffset:
276 self._offset = value.value
277 elif value.state & RegisterValueType.ConstantDataValue == RegisterValueType.ConstantDataValue:
278 self._value = value.value
279 self._size = value.size
280 elif value.state == RegisterValueType.SignedRangeValue:
281 self._offset = value.value
282 self._ranges = []
283 for i in range(0, value.count):
284 start = value.ranges[i].start
285 end = value.ranges[i].end
286 step = value.ranges[i].step
287 if start & (1 << 63):
288 start |= ~((1 << 63) - 1)
289 if end & (1 << 63):
290 end |= ~((1 << 63) - 1)
291 self._ranges.append(ValueRange(start, end, step))
292 elif value.state == RegisterValueType.UnsignedRangeValue:
293 self._offset = value.value
294 self._ranges = []
295 for i in range(0, value.count):
296 start = value.ranges[i].start
297 end = value.ranges[i].end
298 step = value.ranges[i].step
299 self._ranges.append(ValueRange(start, end, step))
300 elif value.state == RegisterValueType.LookupTableValue:
301 self._table = []
302 self._mapping = {}
303 for i in range(0, value.count):
304 from_list = []
305 for j in range(0, value.table[i].fromCount):
306 from_list.append(value.table[i].fromValues[j])
307 self._mapping[value.table[i].fromValues[j]] = value.table[i].toValue
308 self._table.append(LookupTableEntry(from_list, value.table[i].toValue))
309 elif (value.state == RegisterValueType.InSetOfValues) or (value.state == RegisterValueType.NotInSetOfValues):
310 self._values = set()
311 for i in range(0, value.count):
312 self._values.add(value.valueSet[i])

Callers 9

undeterminedMethod · 0.70
constantMethod · 0.70
constant_ptrMethod · 0.70
stack_frame_offsetMethod · 0.70
signed_range_valueMethod · 0.70
unsigned_range_valueMethod · 0.70
in_set_of_valuesMethod · 0.70
not_in_set_of_valuesMethod · 0.70
lookup_table_valueMethod · 0.70

Calls

no outgoing calls

Tested by

no test coverage detected