Rama Doddipatla

67 papers A 10C 6Misc 16Journal 27Unranked 8
YearRankTypeTitle / Venue / Authors
2025 J jnl
CoRR
Youmna Farag, Svetlana Stoyanchev, Mohan Li, Simon Keizer, Rama Doddipatla
2025 J jnl
CoRR
Cong-Thanh Do, Rama Doddipatla, Kate M. Knill
2024 J jnl
IEEE ACM Trans. Audio Speech Lang. Process.
Alejandro Santorum Varela, Svetlana Stoyanchev, Simon Keizer, Rama Doddipatla, Kate M. Knill
2024 Misc conf
ICASSP
Tobias Cord-Landwehr, Christoph Böddeker, Catalin Zorila, Rama Doddipatla, Reinhold Haeb-Umbach
2024 conf
EUSIPCO
Cong-Thanh Do, Shuhei Imai, Rama Doddipatla, Thomas Hain
2024 J jnl
CoRR
Cong-Thanh Do, Shuhei Imai, Rama Doddipatla, Thomas Hain
2024 A conf
INTERSPEECH
Mohan Li, Simon Keizer, Rama Doddipatla
2024 conf
SLT
Mohan Li, Cong-Thanh Do, Simon Keizer, Youmna Farag, Svetlana Stoyanchev, Rama Doddipatla
2024 J jnl
CoRR
Mohan Li, Cong-Thanh Do, Simon Keizer, Youmna Farag, Svetlana Stoyanchev, Rama Doddipatla
2023 A conf
INTERSPEECH
Tobias Cord-Landwehr, Christoph Böddeker, Catalin Zorila, Rama Doddipatla, Reinhold Haeb-Umbach
2023 J jnl
CoRR
Tobias Cord-Landwehr, Christoph Böddeker, Catalin Zorila, Rama Doddipatla, Reinhold Haeb-Umbach
2023 J jnl
CoRR
Simon Keizer, Caroline Dockes, Norbert Braunschweiler, Svetlana Stoyanchev, Rama Doddipatla
2023 Misc conf
ICASSP
Mohan Li, Cong-Thanh Do, Rama Doddipatla
2023 A conf
INTERSPEECH
Cong-Thanh Do, Rama Doddipatla, Mohan Li, Thomas Hain
2023 J jnl
CoRR
Norbert Braunschweiler, Rama Doddipatla, Simon Keizer, Svetlana Stoyanchev
2023 Misc conf
ICASSP
Tobias Cord-Landwehr, Christoph Böddeker, Catalin Zorila, Rama Doddipatla, Reinhold Haeb-Umbach
2023 J jnl
CoRR
Mohan Li, Rama Doddipatla
2023 Misc conf
ICASSP
Catalin Zorila, Rama Doddipatla
2023 C conf
ASRU
Daichi Hayakawa, Takehiko Kagoshima, Kenji Iwata, Norbert Braunschweiler, Rama Doddipatla
2023 J jnl
CoRR
Mohan Li, Rama Doddipatla, Catalin Zorila
2023 C conf
ASRU
Mohan Li, Catalin Zorila, Cong-Thanh Do, Rama Doddipatla
2022 J jnl
CoRR
Norbert Braunschweiler, Rama Doddipatla, Simon Keizer, Svetlana Stoyanchev
2022 J jnl
CoRR
Simon Keizer, Norbert Braunschweiler, Svetlana Stoyanchev, Rama Doddipatla
2022 J jnl
IEEE Signal Process. Lett.
Norbert Braunschweiler, Rama Doddipatla, Simon Keizer, Svetlana Stoyanchev
2022 conf
IWAENC
Tobias Cord-Landwehr, Christoph Böddeker, Thilo von Neumann, Catalin Zorila, Rama Doddipatla, Reinhold Haeb-Umbach
2022 A conf
INTERSPEECH
Cong-Thanh Do, Mohan Li, Rama Doddipatla
2022 J jnl
CoRR
Cong-Thanh Do, Mohan Li, Rama Doddipatla
2022 conf
SLT
Mohan Li, Rama Doddipatla
2022 A conf
INTERSPEECH
Jisi Zhang, Catalin Zorila, Rama Doddipatla, Jon Barker
2022 J jnl
CoRR
Jisi Zhang, Catalin Zorila, Rama Doddipatla, Jon Barker
2022 Misc conf
ICASSP
Catalin Zorila, Rama Doddipatla
2022 J jnl
CoRR
Catalin Zorila, Rama Doddipatla
2022 Misc conf
ICASSP
Mohan Li, Shucong Zhang, Catalin Zorila, Rama Doddipatla
2022 J jnl
CoRR
Mohan Li, Shucong Zhang, Catalin Zorila, Rama Doddipatla
2021 C conf
ASRU
Norbert Braunschweiler, Rama Doddipatla, Simon Keizer, Svetlana Stoyanchev
2021 Misc conf
ICASSP
Svetlana Stoyanchev, Simon Keizer, Rama Doddipatla
2021 conf
SLT
Catalin Zorila, Mohan Li, Rama Doddipatla
2021 C conf
ASRU
Simon Keizer, Norbert Braunschweiler, Svetlana Stoyanchev, Rama Doddipatla
2021 Misc conf
ICASSP
Mohan Li, Catalin Zorila, Rama Doddipatla
2021 C conf
ASRU
Mohan Li, Rama Doddipatla
2021 J jnl
CoRR
Tobias Cord-Landwehr, Christoph Böddeker, Thilo von Neumann, Catalin Zorila, Rama Doddipatla, Reinhold Haeb-Umbach
2021 Misc conf
ICASSP
Cong-Thanh Do, Rama Doddipatla, Thomas Hain
2021 J jnl
CoRR
Cong-Thanh Do, Rama Doddipatla, Thomas Hain
2021 A conf
Interspeech
Jisi Zhang, Catalin Zorila, Rama Doddipatla, Jon Barker
2021 J jnl
CoRR
Jisi Zhang, Catalin Zorila, Rama Doddipatla, Jon Barker
2021 Misc conf
ICASSP
Jisi Zhang, Catalin Zorila, Rama Doddipatla, Jon Barker
2021 J jnl
CoRR
Jisi Zhang, Catalin Zorila, Rama Doddipatla, Jon Barker
2021 conf
IWSDS
Suraj Pandey, Svetlana Stoyanchev, Rama Doddipatla
2021 J jnl
CoRR
Suraj Pandey, Svetlana Stoyanchev, Rama Doddipatla
2021 Misc conf
ICASSP
Shucong Zhang, Cong-Thanh Do, Rama Doddipatla, Erfan Loweimi, Peter Bell, Steve Renals
2021 J jnl
CoRR
Shucong Zhang, Cong-Thanh Do, Rama Doddipatla, Erfan Loweimi, Peter Bell, Steve Renals
2021 conf
SLT
Mohan Li, Catalin Zorila, Rama Doddipatla
2020 J jnl
CoRR
Svetlana Stoyanchev, Simon Keizer, Rama Doddipatla
2020 Misc conf
ICASSP
Shucong Zhang, Cong-Thanh Do, Rama Doddipatla, Steve Renals
2020 Misc conf
ICASSP
Jisi Zhang, Catalin Zorila, Rama Doddipatla, Jon Barker
2020 J jnl
CoRR
Jisi Zhang, Catalin Zorila, Rama Doddipatla, Jon Barker
2019 J jnl
CoRR
Catalin Zorila, Christoph Böddeker, Rama Doddipatla, Reinhold Haeb-Umbach
2019 C conf
ASRU
Catalin Zorila, Christoph Böddeker, Rama Doddipatla, Reinhold Haeb-Umbach
2019 Misc conf
ICASSP
Petko Nikolov Petkov, Vasileios Tsiaras, Rama Doddipatla, Yannis Stylianou
2019 Misc conf
ICASSP
Catalin Zorila, Rama Doddipatla
2017 A conf
INTERSPEECH
Rama Doddipatla, Norbert Braunschweiler, Ranniery Maia
2016 Misc conf
ICASSP
Rama Doddipatla
2015 A conf
INTERSPEECH
Madina Hasan, Rama Doddipatla, Thomas Hain
2015 J jnl
CoRR
Raymond W. M. Ng, Mortaza Doulaty, Rama Doddipatla, Wilker Aziz, Kashif Shah, Oscar Saz, Madina Hasan, Ghada AlHarbi, Lucia Specia, Thomas Hain
2014 A conf
INTERSPEECH
Madina Hasan, Rama Doddipatla, Thomas Hain
2014 A conf
INTERSPEECH
Rama Doddipatla, Madina Hasan, Thomas Hain
2014 conf
IWSLT (Evaluation Campaign)
Raymond W. M. Ng, Mortaza Doulaty, Rama Doddipatla, Wilker Aziz, Kashif Shah, Oscar Saz, Madina Hasan, Ghada AlHaribi, Lucia Specia, Thomas Hain
tests/unit/test_decompile_scores.py
← Index tests/unit/test_decompile_scores.py python
"""Unit tests for bninja/analysis/scores.py — ObfuscationScores."""
import sys
import pytest
from unittest.mock import MagicMock

# Install binaryninja stubs before importing
from tests.unit.conftest_binja_stubs import (
    install_binja_stubs,
    HighLevelILOperation,
)
bn_mock = install_binja_stubs()

from redb.extractors.decompiler.bninja.analysis.scores import (
    ObfuscationScores,
    get_dominated_by,
    uses_mba,
)
import binaryninja.highlevelil as hlil_mod


# ============================================================================
# Helper: Mock HLIL instruction
# ============================================================================

class MockHLILInstruction(hlil_mod.HighLevelILInstruction):
    """Mock HLIL instruction with operation and operands."""
    def __init__(self, operation, operands=None):
        self.operation = operation
        self.operands = operands or []


class MockHLILBasicBlock:
    """Mock HLIL basic block for flattened score testing."""
    def __init__(self, incoming_edges=None, dominator_tree_children=None):
        self.incoming_edges = incoming_edges or []
        self.dominator_tree_children = dominator_tree_children or []


# ============================================================================
# 5a. ObfuscationScores
# ============================================================================


class TestFlattenedScore:
    def test_flattened_score_no_back_edges(self):
        """Linear CFG with no back edges -> score 0.0."""
        block = MockHLILBasicBlock(incoming_edges=[], dominator_tree_children=[])
        func = MagicMock()
        func.basic_blocks = [block]
        scores = ObfuscationScores(func)
        assert scores.flattened_score() == 0.0

    def test_flattened_score_with_loop(self):
        """CFG with a back edge -> score > 0.0."""
        block = MockHLILBasicBlock(dominator_tree_children=[])
        # Create a back edge: an incoming edge whose source is in the dominated set
        edge = MagicMock()
        edge.source = block  # source IS the dominator -> back edge
        block.incoming_edges = [edge]
        func = MagicMock()
        func.basic_blocks = [block]
        scores = ObfuscationScores(func)
        assert scores.flattened_score() > 0.0

    def test_flattened_score_fully_flat(self):
        """Flattened CFG: one block dominates all -> ratio close to 1.0."""
        children = [MockHLILBasicBlock() for _ in range(4)]
        root = MockHLILBasicBlock(dominator_tree_children=children)
        # Back edge from root incoming
        edge = MagicMock()
        edge.source = root
        root.incoming_edges = [edge]
        all_blocks = [root] + children
        func = MagicMock()
        func.basic_blocks = all_blocks
        scores = ObfuscationScores(func)
        assert scores.flattened_score() == pytest.approx(1.0)


class TestMBAScore:
    def test_mba_score_no_mixed_ops(self):
        """Instructions with only arithmetic -> score 0.0."""
        instr = MockHLILInstruction(HighLevelILOperation.HLIL_ADD, operands=[])
        func = MagicMock()
        func.instructions = [instr]
        scores = ObfuscationScores(func)
        assert scores.MBA_score() == 0.0

    def test_mba_score_mixed_ops(self):
        """Instructions with arithmetic + logic -> score > 0.0."""
        inner_logic = MockHLILInstruction(HighLevelILOperation.HLIL_XOR, operands=[])
        outer_arith = MockHLILInstruction(
            HighLevelILOperation.HLIL_ADD, operands=[inner_logic]
        )
        func = MagicMock()
        func.instructions = [outer_arith]
        scores = ObfuscationScores(func)
        assert scores.MBA_score() > 0.0

    def test_mba_score_all_mixed(self):
        """Every instruction has both -> score 1.0."""
        inner_logic = MockHLILInstruction(HighLevelILOperation.HLIL_NOT, operands=[])
        outer_arith = MockHLILInstruction(
            HighLevelILOperation.HLIL_SUB, operands=[inner_logic]
        )
        func = MagicMock()
        func.instructions = [outer_arith]
        scores = ObfuscationScores(func)
        assert scores.MBA_score() == 1.0


class TestGetDominatedBy:
    def test_get_dominated_by(self):
        child1 = MockHLILBasicBlock(dominator_tree_children=[])
        child2 = MockHLILBasicBlock(dominator_tree_children=[])
        root = MockHLILBasicBlock(dominator_tree_children=[child1, child2])
        result = get_dominated_by(root)
        assert root in result
        assert child1 in result
        assert child2 in result
        assert len(result) == 3


class TestUsesMBA:
    def test_uses_mba_arithmetic_only(self):
        instr = MockHLILInstruction(HighLevelILOperation.HLIL_ADD, operands=[])
        assert uses_mba(instr) is False

    def test_uses_mba_logic_only(self):
        instr = MockHLILInstruction(HighLevelILOperation.HLIL_XOR, operands=[])
        assert uses_mba(instr) is False

    def test_uses_mba_mixed(self):
        inner = MockHLILInstruction(HighLevelILOperation.HLIL_AND, operands=[])
        outer = MockHLILInstruction(HighLevelILOperation.HLIL_ADD, operands=[inner])
        assert uses_mba(outer) is True