Source code for angr.knowledge_plugins.indirect_jumps
from typing import List
from .plugin import KnowledgeBasePlugin
[docs]class IndirectJumps(KnowledgeBasePlugin, dict):
[docs] def __init__(self, kb):
super().__init__()
self._kb = kb
self.unresolved = set()
# dict format: {indirect_address: [resolved_addresses]}
self.resolved = {}
[docs] def copy(self):
o = IndirectJumps(self._kb)
o.unresolved.update(self.unresolved)
o.resolved = {}
for k, v in self.resolved.items():
o.resolved[k] = v
[docs] def update_resolved_addrs(self, indirect_address: int, resolved_addresses: List[int]):
# sanity check on usage
if indirect_address is None:
return
if indirect_address in self.resolved:
self.resolved[indirect_address] += list(resolved_addresses)
else:
self.resolved[indirect_address] = list(resolved_addresses)
KnowledgeBasePlugin.register_default("indirect_jumps", IndirectJumps)