Source code for angr.angrdb.serializers.cfg_model
# pylint:disable=unused-import
from ..models import DbCFGModel
from ...knowledge_plugins.cfg.cfg_model import CFGModel
[docs]class CFGModelSerializer:
"""
Serialize/unserialize a CFGModel.
"""
[docs] @staticmethod
def dump(session, db_kb, ident, cfg_model):
"""
:param session:
:param DbKnowledgeBase db_kb: The database object for KnowledgeBase.
:param str ident: Identifier of the CFG model.
:param CFGModel cfg_model: The CFG model to dump.
:return: None
"""
db_cfg_id = session.query(DbCFGModel.id).filter_by(ident=ident).scalar()
if db_cfg_id is not None:
# remove the existing CFG
session.query(DbCFGModel).filter_by(id=db_cfg_id).delete()
db_cfg = DbCFGModel(
kb=db_kb,
ident=ident,
blob=cfg_model.serialize(),
)
session.add(db_cfg)
[docs] @staticmethod
def load(session, db_kb, ident, cfg_manager, loader=None):
db_cfg: DbCFGModel = session.query(DbCFGModel).filter_by(kb=db_kb, ident=ident).scalar()
if db_cfg is None:
return None
cfg_model = CFGModel.parse(db_cfg.blob, cfg_manager=cfg_manager, loader=loader)
return cfg_model