Rajaram Kaliyaperumal

38 papers B 2Journal 16Unranked 20
YearRankTypeTitle / Venue / Authors
2025 conf
SWAT4HCLS
Rick Overkleeft, Sander van Boom, Eric Prud'hommeaux, Kees Burger, Jip Fransen, Marc Padros Goossens, Luiz Olavo Bonino da Silva Santos, Rajaram Kaliyaperumal, Marco Roos
2025 J jnl
BMC Medical Informatics Decis. Mak.
Daphne Wijnbergen, Rajaram Kaliyaperumal, Kees Burger, Luiz Olavo Bonino da Silva Santos, Barend Mons, Marco Roos, Eleni Mina
2024 J jnl
Data Intell.
César Henrique Bernabé, Lieze Thielemans, Rajaram Kaliyaperumal, Claudio Carta, Shuxin Zhang, Celia W. G. van Gelder, Nirupama Benis, Luiz Olavo Bonino da Silva Santos, Ronald Cornet, Bruna dos Santos Vieira, Nawel Lalout, Inês Henriques, Alberto Cámara Ballesteros, Kees Burger, Martijn G. Kersloot, Friederike Ehrhart, Esther van Enckevort, Chris T. A. Evelo, Alasdair J. G. Gray, Marc Hanauer, Kristina M. Hettne, Joep de Ligt, Arnaldo Pereira, Núria Queralt-Rosinach, Erik Schultes, Domenica Taruscio, Andra Waagmeester, Mark D. Wilkinson, Egon L. Willighagen, Mascha Jansen, Barend Mons, Marco Roos, Annika Jacobsen
2024 conf
SWAT4HCLS
Rick Overkleeft, Sander van Boom, Eric Prud'hommeaux, Kees Burger, Jip Fransen, Teus H. Kappen, Luiz Olavo Bonino da Silva Santos, Rajaram Kaliyaperumal, Marco Roos
2023 J jnl
Data Intell.
Luiz Olavo Bonino da Silva Santos, Kees Burger, Rajaram Kaliyaperumal, Mark D. Wilkinson
2023 conf
SWAT4HCLS
Daphne Wijnbergen, Rajaram Kaliyaperumal, Marco Roos, Eleni Mina
2023 J jnl
Data Intell.
Oussama Mohammed Benhamed, Kees Burger, Rajaram Kaliyaperumal, Luiz Olavo Bonino da Silva Santos, Marek Suchánek, Jan Slifka, Mark D. Wilkinson
2022 J jnl
J. Biomed. Semant.
Núria Queralt-Rosinach, Rajaram Kaliyaperumal, César Henrique Bernabé, Qinqin Long, Simone A. Joosten, Henk Jan van der Wijk, Erik Flikkenschild, Kees Burger, Annika Jacobsen, Barend Mons, Marco Roos
2022 conf
SWAT4HCLS
Rajaram Kaliyaperumal, Gurnoor Singh, Núria Queralt-Rosinach, Jumamurat Bayjanov, Peter Bram 't Hoen, Marco Roos
2022 J jnl
J. Biomed. Semant.
Rajaram Kaliyaperumal, Mark D. Wilkinson, Pablo Alarcón Moreno, Nirupama Benis, Ronald Cornet, Bruna dos Santos Vieira, Michel Dumontier, César Henrique Bernabé, Annika Jacobsen, Clémence M. A. Le Cornec, Mario Prieto Godoy, Núria Queralt-Rosinach, Leo J. Schultze Kool, Morris A. Swertz, Philip van Damme, K. Joeri van der Velde, Nawel Lalout, Shuxin Zhang, Marco Roos
2021 J jnl
J. Biomed. Informatics
Martijn G. Kersloot, Annika Jacobsen, Karlijn H. J. Groenen, Bruna dos Santos Vieira, Rajaram Kaliyaperumal, Ameen Abu-Hanna, Ronald Cornet, Peter A. C. 't Hoen, Marco Roos, Leo J. Schultze Kool, Derk L. Arts
2021 conf
dHealth
Rajaram Kaliyaperumal, Núria Queralt Rosinach, Kees Burger, Luiz Olavo Bonino da Silva Santos, Marc Hanauer, Marco Roos
2021 conf
ICBO
Núria Queralt-Rosinach, César Henrique Bernabé, Qinqin Long, Rajaram Kaliyaperumal, Marco Roos
2021 conf
JOWO
Núria Queralt-Rosinach, Mark D. Wilkinson, Rajaram Kaliyaperumal, César Henrique Bernabé, Qinqin Long, Michel Dumontier, Paul N. Schofield, Marco Roos
2020 J jnl
Data Intell.
Annika Jacobsen, Rajaram Kaliyaperumal, Luiz Olavo Bonino da Silva Santos, Barend Mons, Erik Schultes, Marco Roos, Mark Thompson
2020 conf
dHealth
Bruna dos Santos Vieira, Karlijn H. J. Groenen, Peter A. C. 't Hoen, Annika Jacobsen, Marco Roos, Rajaram Kaliyaperumal, Martijn G. Kersloot, Ronald Cornet, Leo J. Schultze Kool
2020 conf
DaMaLOS
Núria Queralt Rosinach, Rajaram Kaliyaperumal, César Henrique Bernabé, Qinqin Long, Henk Jan van der Wijk, Barend Mons, Marco Roos
2020 J jnl
Data Intell.
Annika Jacobsen, Ricardo de Miranda Azevedo, Nick S. Juty, Dominique Batista, Simon J. Coles, Ronald Cornet, Mélanie Courtot, Mercè Crosas, Michel Dumontier, Chris T. A. Evelo, Carole A. Goble, Giancarlo Guizzardi, Karsten Kryger Hansen, Ali Hasnain, Kristina M. Hettne, Jaap Heringa, Rob W. W. Hooft, Melanie Imming, Keith G. Jeffery, Rajaram Kaliyaperumal, Martijn G. Kersloot, Christine R. Kirkpatrick, Tobias Kuhn, Ignasi Labastida, Barbara Magagna, Peter McQuilton, Natalie Meyers, Annalisa Montesanti, Mirjam van Reisen, Philippe Rocca-Serra, Robert Pergl, Susanna-Assunta Sansone, Luiz Olavo Bonino da Silva Santos, Juliane Schneider, George O. Strawn, Mark Thompson, Andra Waagmeester, Tobias Weigel, Mark D. Wilkinson, Egon L. Willighagen, Peter Wittenburg, Marco Roos, Barend Mons, Erik Schultes
2020 J jnl
Data Intell.
Mark Thompson, Kees Burger, Rajaram Kaliyaperumal, Marco Roos, Luiz Olavo Bonino da Silva Santos
2018 conf
SWAT4LS
Annika Jacobsen, Andra Waagmeester, Rajaram Kaliyaperumal, Gregory S. Stupp, Lynn M. Schriml, Mark Thompson, Andrew I. Su, Marco Roos
2017 J jnl
Semantic Web
Patrick Lambrix, Rajaram Kaliyaperumal
2017 J jnl
PeerJ Comput. Sci.
Mark D. Wilkinson, Ruben Verborgh, Luiz Olavo Bonino da Silva Santos, Tim Clark, Morris A. Swertz, Fleur D. L. Kelpin, Alasdair J. G. Gray, Erik A. Schultes, Erik M. van Mulligen, Paolo Ciccarese, Arnold Kuzniar, Anand K. Gavai, Mark Thompson, Rajaram Kaliyaperumal, Jerven T. Bolleman, Michel Dumontier
2017 J jnl
PeerJ Prepr.
Mark D. Wilkinson, Ruben Verborgh, Luiz Olavo Bonino da Silva Santos, Tim Clark, Morris A. Swertz, Fleur D. L. Kelpin, Alasdair J. G. Gray, Erik A. Schultes, Erik M. van Mulligen, Paolo Ciccarese, Arnold Kuzniar, Anand K. Gavai, Mark Thompson, Rajaram Kaliyaperumal, Jerven T. Bolleman, Michel Dumontier
2017 conf
SWAT4LS
Mark Thompson, Luiz Olavo Bonino da Silva Santos, Kees Burger, Rajaram Kaliyaperumal, Erik A. Schultes, Annika Jacobsen, Claudio Carta, Richard Finkers, David van Enckevort, Mascha Jansen, Barend Mons, Marco Roos
2017 conf
SWAT4LS
Claudio Carta, Marco Roos, Annika Jacobsen, Rajaram Kaliyaperumal, Mark Thompson, Mark D. Wilkinson, Ronald Cornet, Andra Waagmeester, David van Enckevort, Mascha Jansen, Luana Licata, Allegra Via, Domenica Taruscio
2017 conf
S4BioDiv@ISWC
Evangelia Papoutsoglou, Rajaram Kaliyaperumal, Theo J. L. van Hintum, Richard G. F. Visser, Ioannis N. Athanasiadis, Richard Finkers
2016 J jnl
PeerJ Prepr.
Mark D. Wilkinson, Ruben Verborgh, Luiz Olavo Bonino da Silva Santos, Tim Clark, Morris A. Swertz, Fleur D. L. Kelpin, Alasdair J. G. Gray, Erik A. Schultes, Erik M. van Mulligen, Paolo Ciccarese, Mark Thompson, Rajaram Kaliyaperumal, Jerven T. Bolleman, Michel Dumontier
2016 conf
SWAT4LS
Marco Roos, Mark D. Wilkinson, Rajaram Kaliyaperumal, Mark Thompson, Claudio Carta, Ronald Cornet, Luiz Olavo Bonino da Silva Santos
2015 conf
SWAT4LS
Eelke van der Horst, Rajaram Kaliyaperumal, Zuotian Tatum, Mark Thompson, Erik A. Schultes, Eleni Mina, Ivo Fokkema, Johan T. den Dunnen, Marco Roos, Jeroen F. J. Laros, Barend Mons, Kristina M. Hettne, Peter A. C. 't Hoen
2015 B conf
e-Science
Eleni Mina, Mark Thompson, Kristina M. Hettne, Willeke M. C. van Roon-Mom, Rajaram Kaliyaperumal, Eelke van der Horst, Katherine Wolstencroft, Barend Mons, Marco Roos
2015 J jnl
J. Biomed. Semant.
Eleni Mina, Mark Thompson, Rajaram Kaliyaperumal, Jun Zhao, Eelke van der Horst, Zuotian Tatum, Kristina M. Hettne, Erik A. Schultes, Barend Mons, Marco Roos
2014 conf
SWAT4LS
Marco Roos, Alasdair J. G. Gray, Andra Waagmeester, Mark Thompson, Rajaram Kaliyaperumal, Eelke van der Horst, Barend Mons, Mark D. Wilkinson
2014 J jnl
F1000Research
Kristina M. Hettne, Reinout van Schouwen, Eleni Mina, Eelke van der Horst, Mark Thompson, Rajaram Kaliyaperumal, Barend Mons, Erik M. van Mulligen, Jan A. Kors, Marco Roos
2014 conf
SWAT4LS
Rajaram Kaliyaperumal, Peter Bram 't Hoen, Mark Thompson, Eelke van der Horst, Marco Roos
2013 B conf
ESWC
Patrick Lambrix, Rajaram Kaliyaperumal
2013 conf
SWAT4LS
Eleni Mina, Mark Thompson, Rajaram Kaliyaperumal, Jun Zhao, Kristina M. Hettne, Erik A. Schultes, Marco Roos
2012 conf
CICLing (1)
He Tan, Rajaram Kaliyaperumal, Nirupama Benis
2011 conf
BioNLP@ACL
He Tan, Rajaram Kaliyaperumal, Nirupama Benis
redb/extractors/decompiler/bninja/analysis/cfg.py
← Index redb/extractors/decompiler/bninja/analysis/cfg.py python
from binaryninja.enums import LowLevelILOperation as LLIL_OP

# Support both package and standalone imports
try:
    from . import cfg_features
except ImportError:
    from redb.extractors.decompiler.bninja.analysis import cfg_features


# ---------------------------------------------------------------------------
# Task 2.2: Build LLIL operation maps at import time using real enum values
# ---------------------------------------------------------------------------

# Prime product map: LLIL operation integer value -> small prime
cfg_features.LLIL_OP_PRIMES = {
    # SET_REG, SET_REG_SPLIT
    LLIL_OP.LLIL_SET_REG.value: 2,
    LLIL_OP.LLIL_SET_REG_SPLIT.value: 2,
    # SET_FLAG
    LLIL_OP.LLIL_SET_FLAG.value: 3,
    # LOAD
    LLIL_OP.LLIL_LOAD.value: 5,
    # STORE
    LLIL_OP.LLIL_STORE.value: 7,
    # PUSH, POP
    LLIL_OP.LLIL_PUSH.value: 11,
    LLIL_OP.LLIL_POP.value: 13,
    # CALL, TAILCALL, SYSCALL
    LLIL_OP.LLIL_CALL.value: 17,
    LLIL_OP.LLIL_TAILCALL.value: 17,
    LLIL_OP.LLIL_SYSCALL.value: 19,
    # RET, NORET
    LLIL_OP.LLIL_RET.value: 23,
    LLIL_OP.LLIL_NORET.value: 23,
    # IF, GOTO
    LLIL_OP.LLIL_IF.value: 29,
    LLIL_OP.LLIL_GOTO.value: 31,
    # ADD, SUB
    LLIL_OP.LLIL_ADD.value: 37,
    LLIL_OP.LLIL_SUB.value: 41,
    # AND, OR, XOR
    LLIL_OP.LLIL_AND.value: 43,
    LLIL_OP.LLIL_OR.value: 47,
    LLIL_OP.LLIL_XOR.value: 53,
    # LSL, LSR, ASR, ROL, ROR
    LLIL_OP.LLIL_LSL.value: 59,
    LLIL_OP.LLIL_LSR.value: 61,
    LLIL_OP.LLIL_ASR.value: 67,
    LLIL_OP.LLIL_ROL.value: 71,
    LLIL_OP.LLIL_ROR.value: 73,
    # MUL, DIVU, DIVS, MODU, MODS
    LLIL_OP.LLIL_MUL.value: 79,
    LLIL_OP.LLIL_DIVU.value: 83,
    LLIL_OP.LLIL_DIVS.value: 83,
    LLIL_OP.LLIL_MODU.value: 89,
    LLIL_OP.LLIL_MODS.value: 89,
    # NEG, NOT
    LLIL_OP.LLIL_NEG.value: 97,
    LLIL_OP.LLIL_NOT.value: 101,
    # CMP_E, CMP_NE, CMP_SLT, CMP_ULT, CMP_SLE, CMP_ULE
    # CMP_SGT, CMP_UGT, CMP_SGE, CMP_UGE
    LLIL_OP.LLIL_CMP_E.value: 103,
    LLIL_OP.LLIL_CMP_NE.value: 103,
    LLIL_OP.LLIL_CMP_SLT.value: 107,
    LLIL_OP.LLIL_CMP_ULT.value: 107,
    LLIL_OP.LLIL_CMP_SLE.value: 109,
    LLIL_OP.LLIL_CMP_ULE.value: 109,
    LLIL_OP.LLIL_CMP_SGT.value: 113,
    LLIL_OP.LLIL_CMP_UGT.value: 113,
    LLIL_OP.LLIL_CMP_SGE.value: 127,
    LLIL_OP.LLIL_CMP_UGE.value: 127,
    # NOP
    LLIL_OP.LLIL_NOP.value: 1,
    # SX, ZX, LOW_PART, BOOL_TO_INT
    LLIL_OP.LLIL_SX.value: 131,
    LLIL_OP.LLIL_ZX.value: 137,
    LLIL_OP.LLIL_LOW_PART.value: 139,
    LLIL_OP.LLIL_BOOL_TO_INT.value: 149,
    # JUMP, JUMP_TO
    LLIL_OP.LLIL_JUMP.value: 151,
    LLIL_OP.LLIL_JUMP_TO.value: 151,
}

# Category map: LLIL operation integer value -> category index
_ARITHMETIC = {
    LLIL_OP.LLIL_ADD, LLIL_OP.LLIL_ADC, LLIL_OP.LLIL_SUB, LLIL_OP.LLIL_SBB,
    LLIL_OP.LLIL_MUL, LLIL_OP.LLIL_MULU_DP, LLIL_OP.LLIL_MULS_DP,
    LLIL_OP.LLIL_DIVU, LLIL_OP.LLIL_DIVU_DP, LLIL_OP.LLIL_DIVS,
    LLIL_OP.LLIL_DIVS_DP, LLIL_OP.LLIL_MODU, LLIL_OP.LLIL_MODS,
    LLIL_OP.LLIL_NEG,
}
_LOGIC = {
    LLIL_OP.LLIL_AND, LLIL_OP.LLIL_OR, LLIL_OP.LLIL_XOR, LLIL_OP.LLIL_NOT,
    LLIL_OP.LLIL_LSL, LLIL_OP.LLIL_LSR, LLIL_OP.LLIL_ASR,
    LLIL_OP.LLIL_ROL, LLIL_OP.LLIL_RLC, LLIL_OP.LLIL_ROR, LLIL_OP.LLIL_RRC,
}
_TRANSFER = {
    LLIL_OP.LLIL_SET_REG, LLIL_OP.LLIL_SET_REG_SPLIT, LLIL_OP.LLIL_SET_FLAG,
    LLIL_OP.LLIL_GOTO, LLIL_OP.LLIL_IF, LLIL_OP.LLIL_JUMP, LLIL_OP.LLIL_JUMP_TO,
    LLIL_OP.LLIL_RET, LLIL_OP.LLIL_NORET, LLIL_OP.LLIL_PUSH, LLIL_OP.LLIL_POP,
}
_CALL = {
    LLIL_OP.LLIL_CALL, LLIL_OP.LLIL_TAILCALL, LLIL_OP.LLIL_SYSCALL,
}
_COMPARISON = {
    LLIL_OP.LLIL_CMP_E, LLIL_OP.LLIL_CMP_NE,
    LLIL_OP.LLIL_CMP_SLT, LLIL_OP.LLIL_CMP_ULT,
    LLIL_OP.LLIL_CMP_SLE, LLIL_OP.LLIL_CMP_ULE,
    LLIL_OP.LLIL_CMP_SGE, LLIL_OP.LLIL_CMP_UGE,
    LLIL_OP.LLIL_CMP_SGT, LLIL_OP.LLIL_CMP_UGT,
    LLIL_OP.LLIL_TEST_BIT, LLIL_OP.LLIL_FLAG_COND,
}
_MEMORY = {
    LLIL_OP.LLIL_LOAD, LLIL_OP.LLIL_STORE,
}

cfg_features.LLIL_OP_CATEGORIES = {}
for _op in _ARITHMETIC:
    cfg_features.LLIL_OP_CATEGORIES[_op.value] = cfg_features.CAT_ARITHMETIC
for _op in _LOGIC:
    cfg_features.LLIL_OP_CATEGORIES[_op.value] = cfg_features.CAT_LOGIC
for _op in _TRANSFER:
    cfg_features.LLIL_OP_CATEGORIES[_op.value] = cfg_features.CAT_TRANSFER
for _op in _CALL:
    cfg_features.LLIL_OP_CATEGORIES[_op.value] = cfg_features.CAT_CALL
for _op in _COMPARISON:
    cfg_features.LLIL_OP_CATEGORIES[_op.value] = cfg_features.CAT_COMPARISON
for _op in _MEMORY:
    cfg_features.LLIL_OP_CATEGORIES[_op.value] = cfg_features.CAT_MEMORY

# Set of CALL operation values for counting
_CALL_OPS = {op.value for op in _CALL}


# ---------------------------------------------------------------------------
# Task 2.1 + 2.3: Rewritten CFGAnalysis
# ---------------------------------------------------------------------------

class CFGAnalysis:
    def __init__(self, function, llil_function=None):
        self.function = function
        self.llil_function = llil_function

    def extract_function_cfg(self):
        """Extract function-level CFG features as a flat dictionary."""

        if self.function is None:
            return None

        blocks = list(self.function.basic_blocks)
        if not blocks:
            return None

        n = len(blocks)

        # 1. Build index-based adjacency from Binary Ninja blocks
        addr_to_idx = {b.start: i for i, b in enumerate(blocks)}
        successors = [[] for _ in range(n)]
        predecessors = [[] for _ in range(n)]
        for i, block in enumerate(blocks):
            for edge in block.outgoing_edges:
                if edge.target is None:
                    continue
                target_idx = addr_to_idx.get(edge.target.start)
                if target_idx is not None:
                    successors[i].append(target_idx)
                    predecessors[target_idx].append(i)

        # 2. BFS order (reusable across multiple features)
        bfs = cfg_features.bfs_order(successors, n)

        # 3. Collect per-block LLIL operations (for prime product + ACFG features)
        block_llil_ops = self._collect_block_llil_ops(blocks, addr_to_idx, n)
        all_llil_ops = [op for block_ops in block_llil_ops for op in block_ops]

        # 4. Structural counts
        edge_count = sum(len(s) for s in successors)
        total_llil = sum(len(ops) for ops in block_llil_ops)
        call_count = sum(
            1 for ops in block_llil_ops for op in ops
            if op in _CALL_OPS
        )

        # 5. Compute all features
        bb_features = cfg_features.build_block_features(block_llil_ops, successors, n)

        return {
            "cfg_topology_hash": cfg_features.compute_topology_hash(successors, bfs, n),
            "block_count": n,
            "edge_count": edge_count,
            "llil_total_operations": total_llil,
            "call_count": call_count,
            "cyclomatic_complexity": edge_count - n + 2,
            "loop_count": cfg_features.count_back_edges(successors, n),
            "max_depth": cfg_features.bfs_max_depth(successors, n),
            "max_fan_out": max((len(s) for s in successors), default=0),
            "md_index_topdown": cfg_features.compute_md_index_topdown(successors, predecessors, bfs),
            "md_index_bottomup": cfg_features.compute_md_index_bottomup(successors, predecessors, n),
            "prime_product_llil": cfg_features.compute_prime_product(all_llil_ops),
            "cfg_feature_tlsh": cfg_features.compute_cfg_feature_tlsh(bb_features, bfs),
            "wl_minhash": cfg_features.compute_wl_minhash(successors, predecessors, bb_features, n),
            "bb_features": bb_features,
            "cfg_adjacency": cfg_features.pack_adjacency(successors),
        }

    def _collect_block_llil_ops(self, blocks, addr_to_idx, n):
        """
        Collect LLIL operation integers per native basic block.
        Walks the full expression tree of each instruction so that
        nested operations (e.g. ADD inside SET_REG) are captured.
        Returns list of n lists, one per block.
        """
        block_ops = [[] for _ in range(n)]

        if self.llil_function is None:
            return block_ops

        try:
            for llil_block in self.llil_function.basic_blocks:
                # Map LLIL block to native block via source_block
                if llil_block.source_block is not None:
                    native_idx = addr_to_idx.get(llil_block.source_block.start)
                    if native_idx is not None:
                        for instr in llil_block:
                            self._walk_llil_ops(instr, block_ops[native_idx])
        except Exception:
            pass  # Return empty ops — LLIL-dependent fields will be 0/null

        return block_ops

    @staticmethod
    def _walk_llil_ops(expr, ops_list):
        """Collect operation values from an LLIL expression tree iteratively."""
        stack = [expr]
        while stack:
            node = stack.pop()
            if hasattr(node, 'operation'):
                ops_list.append(node.operation.value)
            if hasattr(node, 'operands'):
                for operand in node.operands:
                    if hasattr(operand, 'operation'):
                        stack.append(operand)