Source code for angr.utils.enums_conv

# pylint:disable=no-member
import logging

l = logging.getLogger(name=__name__)

from ..protos.primitives_pb2 import Edge


_CFG_JUMPKINDS = {
    None: Edge.UnknownJumpkind,
    "Ijk_Boring": Edge.Boring,
    "Ijk_Call": Edge.Call,
    "Ijk_Ret": Edge.Return,
    "Ijk_FakeRet": Edge.FakeReturn,
    "Ijk_Syscall": Edge.Syscall,
    "Ijk_Sys_syscall": Edge.Sys_syscall,
    "Ijk_Sys_int128": Edge.Sys_int128,
    "Ijk_NoDecode": Edge.NoDecode,
    "Ijk_EmWarn": Edge.EmWarn,
    "Ijk_SigFPE_IntDiv": Edge.SigFPE_IntDiv,
    "Ijk_SigTRAP": Edge.SigTRAP,
    "Ijk_SigSEGV": Edge.SigSEGV,
    "Ijk_MapFail": Edge.MapFail,
    "Ijk_NoRedir": Edge.NoRedir,
    "Ijk_ClientReq": Edge.ClientReq,
    "Ijk_Exception": Edge.Exception,
}


_PB_TO_CFG_JUMPKINDS = {}
for k, v in _CFG_JUMPKINDS.items():
    _PB_TO_CFG_JUMPKINDS[v] = k


_FUNCTION_EDGETYPES = {
    None: Edge.UnknownJumpkind,
    "transition": Edge.Boring,
    "call": Edge.Call,
    "return": Edge.Return,
    "fake_return": Edge.FakeReturn,
    "syscall": Edge.Syscall,
    "exception": Edge.Exception,
}


_PB_TO_FUNCTION_EDGETYPES = {}
for k, v in _FUNCTION_EDGETYPES.items():
    _PB_TO_FUNCTION_EDGETYPES[v] = k


[docs]def cfg_jumpkind_to_pb(jk): try: return _CFG_JUMPKINDS[jk] except KeyError: l.error("Unsupported CFG jumpkind %s in cfg_jumpkind_to_pb. Please report it on GitHub.", jk) return None
[docs]def func_edge_type_to_pb(jk): try: return _FUNCTION_EDGETYPES[jk] except KeyError: l.error("Unsupported function edge type %s in func_edge_type_to_pb. Please report it on GitHub.", jk) return None
[docs]def cfg_jumpkind_from_pb(pb): try: return _PB_TO_CFG_JUMPKINDS[pb] except KeyError: l.error("Unsupported protobuf jumpkind %s in cfg_jumpkind_from_pb. Please report it on GitHub.", pb) return None
[docs]def func_edge_type_from_pb(pb): try: return _PB_TO_FUNCTION_EDGETYPES[pb] except KeyError: l.error("Unsupported protobuf jumpkind %s in func_edge_type_to_pb. Please report it on GitHub.", pb) return None