Mamta Mittal

50 papers Journal 48Unranked 2
YearRankTypeTitle / Venue / Authors
2025 J jnl
PeerJ Comput. Sci.
Muhammad Ahtsam Naeem, Shangming Yang, Mamta Mittal, Jyotindra Narayan, Muhammad Asim Saleem, Mohammad Shabaz
2025 J jnl
WIREs Data. Mining. Knowl. Discov.
Tamanna Sachdeva, Lalit Mohan Goyal, Mamta Mittal
2024 J jnl
New Gener. Comput.
Mamta Mittal, Nitin Kumar Chauhan, Adrija Ghansiyal, D. Jude Hemanth
2024 J jnl
ACM Trans. Asian Low Resour. Lang. Inf. Process.
Chetan Madan, Harshita Diddee, Deepika Kumar, Mamta Mittal
2024 J jnl
Intell. Decis. Technol.
Neeru Mago, Mamta Mittal, D. Jude Hemanth, Rakhee Sharma
2024 J jnl
WIREs Data. Mining. Knowl. Discov.
Mamta Mittal, Vedika Gupta, Mohammad Aamash, Tejas Upadhyay
2024 J jnl
WIREs Data. Mining. Knowl. Discov.
H. M. K. K. M. B. Herath, Mamta Mittal, Aman Kataria
2023 J jnl
Int. J. Inf. Manag. Data Insights
Bijoy Chhetri, Lalit Mohan Goyal, Mamta Mittal
2023 J jnl
WIREs Data. Mining. Knowl. Discov.
Srishti Vashishtha, Vedika Gupta, Mamta Mittal
2022 J jnl
Int. J. Inf. Manag. Data Insights
H. M. K. K. M. B. Herath, Mamta Mittal
2022 J jnl
Earth Sci. Informatics
Jasleen Kaur Sethi, Mamta Mittal
2021 J jnl
Int. J. Inf. Syst. Model. Des.
Suman Kumari, Basant Agarwal, Mamta Mittal
2021 J jnl
Multim. Tools Appl.
Muhammad Attique Khan, Mamta Mittal, Lalit Mohan Goyal, Sudipta Roy
2021 J jnl
Earth Sci. Informatics
Jasleen Kaur Sethi, Mamta Mittal
2021 J jnl
Multim. Tools Appl.
Lalit Mohan Goyal, Mamta Mittal, Munish Kumar, Bhavneet Kaur, Meenakshi Sharma, Amit Verma, Iqbaldeep Kaur
2021 J jnl
Int. J. Secur. Priv. Pervasive Comput.
Jyotsna Malhotra, Jasleen Kaur Sethi, Mamta Mittal
2021 J jnl
Appl. Soft Comput.
Farah Saeed, Muhammad Attique Khan, Muhammad Sharif, Mamta Mittal, Lalit Mohan Goyal, Sudipta Roy
2021 J jnl
Int. J. Reason. based Intell. Syst.
Sudipta Roy, Bhavya Patel, Debnath Bhattacharyya, Kushal Dhayal, Tai-Hoon Kim, Mamta Mittal
2021 J jnl
Multim. Tools Appl.
Mamta Mittal, Munish Kumar, Amit Verma, Iqbaldeep Kaur, Bhavneet Kaur, Meenakshi Sharma, Lalit Mohan Goyal
2021 J jnl
Int. J. Inf. Manag. Data Insights
Alankrita Aggarwal, Mamta Mittal, Gopi Battineni
2021 J jnl
J. Cases Inf. Technol.
Adrija Ghansiyal, Mamta Mittal, Arpan Kumar Kar
2021 J jnl
Int. J. Inf. Manag. Data Insights
Manish Kumar Pandey, Mamta Mittal, Karthikeyan Subbiah
2021 J jnl
Microprocess. Microsystems
Mamta Mittal, Suresh Chandra Satapathy, Vaibhav Pal, Basant Agarwal, Lalit Mohan Goyal, Pritee Parwekar
2020 J jnl
EAI Endorsed Trans. Scalable Inf. Syst.
Akshay Aggarwal, Aniruddha Chauhan, Deepika Kumar, Mamta Mittal, Sharad Verma
2020 J jnl
EAI Endorsed Trans. Pervasive Health Technol.
Bijoy Chhetri, Lalit Mohan Goyal, Mamta Mittal, Sandeep Gurung
2020 J jnl
EAI Endorsed Trans. Pervasive Health Technol.
Sunil Chawla, Mamta Mittal, Meenakshi Chawla, Lalit Mohan Goyal
2020 J jnl
SN Comput. Sci.
Amritpal Singh, Amanpreet Singh Saimbhi, Navjot Singh, Mamta Mittal
2020 J jnl
Sensors
Ansh Mittal, Deepika Kumar, Mamta Mittal, Tanzila Saba, Ibrahim Abunadi, Amjad Rehman, Sudipta Roy
2020 conf
ICCCS
Madhu Arora, Lalit Mohan Goyal, Nalini Chintalapudi, Mamta Mittal
2020 J jnl
SN Comput. Sci.
Aman Agarwal, Mamta Mittal, Akshat Pathak, Lalit Mohan Goyal
2020 J jnl
Pattern Recognit. Lett.
Mehshan Ahmed Khan, Muhammad Attique Khan, Fawad Ahmed, Mamta Mittal, Lalit Mohan Goyal, D. Jude Hemanth, Suresh Chandra Satapathy
2020 J jnl
Symmetry
Mamta Mittal, Ranjeeta Kaushik, Amit Verma, Iqbaldeep Kaur, Lalit Mohan Goyal, Sudipta Roy, Tai-Hoon Kim
2020 J jnl
Sensors
Lalit Mohan Goyal, Mamta Mittal, Ranjeeta Kaushik, Amit Verma, Iqbaldeep Kaur, Sudipta Roy, Tai-Hoon Kim
2020 conf
ICCCS
Mamta Mittal, Gopi Battineni, Pradeep Kumar, Pranjal Sharma, Ankit Panwar
2020 J jnl
Earth Sci. Informatics
Lalit Mohan Goyal, Maanak Arora, Tushar Pandey, Mamta Mittal
2020 J jnl
Symmetry
Akshay Aggarwal, Aniruddha Chauhan, Deepika Kumar, Mamta Mittal, Sudipta Roy, Tai-Hoon Kim
2019 J jnl
Int. J. Inf. Syst. Model. Des.
Mamta Mittal, Rajendra Kumar Sharma, Varinder Pal Singh, Raghvendra Kumar
2019 J jnl
EAI Endorsed Trans. Scalable Inf. Syst.
Jasleen K. Sethi, Mamta Mittal
2019 J jnl
IEEE Access
Mamta Mittal, Amit Verma, Iqbaldeep Kaur, Bhavneet Kaur, Meenakshi Sharma, Lalit Mohan Goyal, Sudipta Roy, Tai-Hoon Kim
2019 J jnl
WIREs Data Mining Knowl. Discov.
Mamta Mittal, Lalit Mohan Goyal, D. Jude Hemanth, Jasleen K. Sethi
2019 J jnl
Appl. Soft Comput.
Mamta Mittal, Lalit Mohan Goyal, Sumit Kaur, Iqbaldeep Kaur, Amit Verma, D. Jude Hemanth
2019 J jnl
IEEE Access
Muhammad Asim Saleem, Shijie Zhou, Abida Sharif, Tanzila Saba, Muhammad Azam Zia, Ashar Javed, Sudipta Roy, Mamta Mittal
2019 J jnl
Evol. Syst.
Tran Manh Tuan, Pham Minh Chuan, Mumtaz Ali, Tran Thi Ngan, Mamta Mittal, Le Hoang Son
2019 J jnl
Clust. Comput.
Ritu Garg, Mamta Mittal, Le Hoang Son
2019 J jnl
EAI Endorsed Trans. Scalable Inf. Syst.
Malav Shastri, Sudipta Roy, Mamta Mittal
2018 J jnl
Knowl. Based Syst.
Le Hoang Son, Francisco Chiclana, Raghvendra Kumar, Mamta Mittal, Manju Khari, Jyotir Moy Chatterjee, Sung Wook Baik
2018 J jnl
Comput. Electr. Eng.
Bhavneet Kaur, Meenakshi Sharma, Mamta Mittal, Amit Verma, Lalit Mohan Goyal, D. Jude Hemanth
2018 J jnl
J. Medical Syst.
D. Jude Hemanth, J. Anitha, Le Hoang Son, Mamta Mittal
2018 J jnl
IET Image Process.
Madhuri Yadav, Ravindra Kumar Purwar, Mamta Mittal
2018 J jnl
EAI Endorsed Trans. Pervasive Health Technol.
Mamta Mittal, Iqbaldeep Kaur, Subhash Chandra Pandey, Amit Verma, Lalit Mohan Goyal
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)