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

Method __init__

python/variable.py:261–313  ·  view source on GitHub ↗
(self, arch=None, value=None)

Source from the content-addressed store, hash-verified

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])
313 self._count = value.count
314
315 def __repr__(self):
316 if self._type == RegisterValueType.EntryValue:

Callers

nothing calls this directly

Calls 5

get_reg_nameMethod · 0.80
ValueRangeClass · 0.70
LookupTableEntryClass · 0.70
appendMethod · 0.45
addMethod · 0.45

Tested by

no test coverage detected