Karthik Vaidhyanathan

85 papers A* 1A 5B 7C 1Misc 2Journal 48Unranked 21
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Softw.
Karthik Vaidhyanathan, Davide Taibi
2026 J jnl
CoRR
Rudra Dhar, Karthik Vaidhyanathan, Vasudeva Varma
2026 J jnl
CoRR
Bassam Adnan, Aviral Gupta, Sreemaee Akshathala, Karthik Vaidhyanathan
2026 J jnl
CoRR
Shaunak Biswas, Hiya Bhatt, Karthik Vaidhyanathan
2026 J jnl
CoRR
Hemang Jain, Divyansh Pandey, Karthik Vaidhyanathan
2026 J jnl
CoRR
Bassam Adnan, Matteo Esposito, Davide Taibi, Karthik Vaidhyanathan
2026 J jnl
IEEE Softw.
Karthik Vaidhyanathan
2026 J jnl
J. Syst. Softw.
Matteo Esposito, Xiaozhou Li, Sergio Moreschini, Noman Ahmad, Tomás Cerný, Karthik Vaidhyanathan, Valentina Lenarduzzi, Davide Taibi
2026 J jnl
CoRR
Ananya Vishal Halgatti, Shaunak Biswas, Hiya Bhatt, Srinivasan Rakhunathan, Karthik Vaidhyanathan
2026 J jnl
IEEE Softw.
Prakhar Singhal, Shaunak Biswas, Karthik Vaidhyanathan, Akhila Matathammal, Ch Pavan Harshit, Ravi Kappagantu, Srinivas V. Katakam, Jitendra Chougala
2026 J jnl
CoRR
Sathvika Miryala, Rudra Dhar, Karthik Vaidhyanathan
2026 J jnl
IEEE Softw.
Karthik Vaidhyanathan
2026 J jnl
CoRR
Rodrigo Falcão, Frank Elberzhager, Karthik Vaidhyanathan
2025 J jnl
CoRR
D. Sree Yashaswinee, Gargie Tambe, Y. Raghu Reddy, Karthik Vaidhyanathan
2025 J jnl
CoRR
Chandrasekar Sridhar, Vyakhya Gupta, Prakhar Jain, Karthik Vaidhyanathan
2025 B conf
CAIN
Chandrasekar Sridhar, Vyakhya Gupta, Prakhar Jain, Karthik Vaidhyanathan
2025 conf
ICSA Companion
Hiya Bhatt, Sahil, Karthik Vaidhyanathan, Rahul Biju, Deepak Gangadharan, Ramona Trestian, Purav Shah
2025 J jnl
CoRR
Hiya Bhatt, Sahil, Karthik Vaidhyanathan, Rahul Biju, Deepak Gangadharan, Ramona Trestian, Purav Shah
2025 J jnl
CoRR
Sreemaee Akshathala, Bassam Adnan, Mahisha Ramesh, Karthik Vaidhyanathan, Basil Muhammed, Kannan Parthasarathy
2025 J jnl
CoRR
Rudra Dhar, Adyansh Kakran, Amey Karan, Karthik Vaidhyanathan, Vasudeva Varma
2025 J jnl
CoRR
Hemang Jain, Shailender Goyal, Divyansh Pandey, Karthik Vaidhyanathan
2025 conf
ICSA Companion
Akhila Matathammal, Kriti Gupta, Larissa Lavanya, Ananya Vishal Halgatti, Priyanshi Gupta, Karthik Vaidhyanathan
2025 J jnl
CoRR
Akhila Matathammal, Kriti Gupta, Larissa Lavanya, Ananya Vishal Halgatti, Priyanshi Gupta, Karthik Vaidhyanathan
2025 J jnl
IEEE Access
Savitha Viswanadh Kandala, Akshit Gureja, Nagesh Walchatwar, Rishabh Agrawal, Shiven Sinha, Sachin Chaudhari, Karthik Vaidhyanathan, Venkatesh Choppella, Prabhakar Bhimalapuram, Harikumar Kandath, Aftab M. Hussain
2025 B conf
CAIN
Kannan Parthasarathy, Karthik Vaidhyanathan, Rudra Dhar, Venkat Krishnamachari, Adyansh Kakran, Sreemaee Akshathala, Shrikara Arun, Amey Karan, Basil Muhammed, Sumant Dubey, Mohan Veerubhotla
2025 J jnl
CoRR
Kannan Parthasarathy, Karthik Vaidhyanathan, Rudra Dhar, Venkat Krishnamachari, Basil Muhammed, Adyansh Kakran, Sreemaee Akshathala, Shrikara Arun, Sumant Dubey, Mohan Veerubhotla, Amey Karan
2025 J jnl
CoRR
Radu Apsan, Vincenzo Stoico, Michel Albonico, Rudra Dhar, Karthik Vaidhyanathan, Ivano Malavolta
2025 J jnl
CoRR
Matteo Esposito, Xiaozhou Li, Sergio Moreschini, Noman Ahmad, Tomás Cerný, Karthik Vaidhyanathan, Valentina Lenarduzzi, Davide Taibi
2025 J jnl
CoRR
Luis Cruz, João Paulo Fernandes, Maja H. Kirkeby, Silverio Martínez-Fernández, June Sallou, Hina Anwar, Enrique Barba Roque, Justus Bogner, Joel Castaño, Fernando Castor, Aadil Chasmawala, Simão Cunha, Daniel Feitosa, Alexandra González, Andreas Jedlitschka, Patricia Lago, Henry Muccini, Ana Oprescu, Pooja Rani, João Saraiva, Federica Sarro, Raghavendra Selvan, Karthik Vaidhyanathan, Roberto Verdecchia, Ivan P. Yamshchikov
2025 J jnl
CoRR
Hiya Bhatt, Shaunak Biswas, Srinivasan Rakhunathan, Karthik Vaidhyanathan
2025 A conf
ICSA
Shrikara Arun, Meghana Tedla, Karthik Vaidhyanathan
2025 J jnl
CoRR
Shrikara Arun, Meghana Tedla, Karthik Vaidhyanathan
2025 conf
ICSA Companion
Bassam Adnan, Sathvika Miryala, Aneesh Sambu, Karthik Vaidhyanathan, Martina De Sanctis, Romina Spalazzese
2025 J jnl
CoRR
Bassam Adnan, Sathvika Miryala, Aneesh Sambu, Karthik Vaidhyanathan, Martina De Sanctis, Romina Spalazzese
2025 B conf
CAIN
Kritin Maddireddy, Santhosh Kotekal Methukula, Chandrasekar Sridhar, Karthik Vaidhyanathan
2025 J jnl
CoRR
Kritin Maddireddy, Santhosh Kotekal Methukula, Chandrasekar Sridhar, Karthik Vaidhyanathan
2025 C conf
SIMULTECH
Philipp Zech, Karthik Vaidhyanathan, Likhith Kanigolla, Luca Rahm, Ruth Breu
2025 J jnl
CoRR
Divyansh Pandey, Vyakhya Gupta, Prakhar Singhal, Karthik Vaidhyanathan
2025 J jnl
CoRR
Ioan-Sorin Comsa, Purav Shah, Karthik Vaidhyanathan, Deepak Gangadharan, Christof Imhof, Per Bergamin, Aryan Kaushik, Gabriel-Miro Muntean, Ramona Trestian
2025 J jnl
CoRR
Arihant Tripathy, Ch Pavan Harshit, Karthik Vaidhyanathan
2025 A conf
EASE
Ishan Kavathekar, Raghav Donakanti, Ponnurangam Kumaraguru, Karthik Vaidhyanathan
2025 J jnl
CoRR
Ishan Kavathekar, Raghav Donakanti, Ponnurangam Kumaraguru, Karthik Vaidhyanathan
2025 conf
ECSA (Tracks and Workshops)
Karthik Vaidhyanathan, Henry Muccini
2025 B conf
ECSA
Hiya Bhatt, Shaunak Biswas, Srinivasan Rakhunathan, Karthik Vaidhyanathan
2024 conf
ICSA-C
Likhith Kanigolla, Gaurav Pal, Karthik Vaidhyanathan, Deepak Gangadharan, Anuradha Vattem
2024 A conf
ICSA
Rudra Dhar, Karthik Vaidhyanathan, Vasudeva Varma
2024 J jnl
CoRR
Rudra Dhar, Karthik Vaidhyanathan, Vasudeva Varma
2024 conf
ICSA-C
Meghana Tedla, Shubham Kulkarni, Karthik Vaidhyanathan
2024 J jnl
CoRR
Meghana Tedla, Shubham Kulkarni, Karthik Vaidhyanathan
2024 J jnl
CoRR
K. S. Viswanadh, Akshit Gureja, Nagesh Walchatwar, Rishabh Agrawal, Shiven Sinha, Sachin Chaudhari, Karthik Vaidhyanathan, Venkatesh Choppella, Prabhakar Bhimalapuram, Harikumar Kandath, Aftab M. Hussain
2024 conf
ICSA-C
VJS Pranavasri, Leo Francis, Gaurav Pal, Ushasri Mogadali, Anuradha Vattem, Karthik Vaidhyanathan, Deepak Gangadharan
2024 conf
ICSA-C
Rudra Dhar, Karthik Vaidhyanathan, Vasudeva Varma
2024 Misc conf
SAC
Karthik Vaidhyanathan, Mauro Caporuscio, Stefano Florio, Henry Muccini
2024 J jnl
CoRR
Prakhar Jain, Prakhar Singhal, Divyansh Pandey, Giovanni Quatrocchi, Karthik Vaidhyanathan
2024 conf
ICSOC (1)
Prakhar Jain, Prakhar Singhal, Divyansh Pandey, Giovanni Quatrocchi, Karthik Vaidhyanathan
2024 conf
ICSA-C
Raghav Donakanti, Prakhar Jain, Shubham Kulkarni, Karthik Vaidhyanathan
2024 J jnl
CoRR
Raghav Donakanti, Prakhar Jain, Shubham Kulkarni, Karthik Vaidhyanathan
2024 conf
SEAMS@ICSE
Arya Marda, Shubham Kulkarni, Karthik Vaidhyanathan
2024 J jnl
CoRR
Arya Marda, Shubham Kulkarni, Karthik Vaidhyanathan
2024 conf
ICSA-C
Hiya Bhatt, Shrikara Arun, Adyansh Kakran, Karthik Vaidhyanathan
2024 J jnl
CoRR
Hiya Bhatt, Shrikara Arun, Adyansh Kakran, Karthik Vaidhyanathan
2023 conf
CompEd (2)
Sai Anirudh Karre, Karthik Vaidhyanathan, Y. Raghu Reddy
2023 J jnl
Proc. ACM Hum. Comput. Interact.
Mina Alipour, Mahyar Tourchi Moghaddam, Karthik Vaidhyanathan, Mikkel Baun Kjærgaard
2023 conf
HCI (40)
Mina Alipour, Mahyar Tourchi Moghaddam, Karthik Vaidhyanathan, Tobias Kristensen, Nicolai Krogager Asmussen
2023 conf
WF-IoT
VJS Pranavasri, Leo Francis, Ushasri Mogadali, Gaurav Pal, SVSLN Surya Suhas Vaddhiparthy, Anuradha Vattem, Karthik Vaidhyanathan, Deepak Gangadharan
2023 J jnl
Dagstuhl Reports
Grace A. Lewis, Henry Muccini, Ipek Ozkaya, Karthik Vaidhyanathan, Roland Weiss, Liming Zhu
2023 conf
WF-IoT
Akshit Gureja, Rishabh Agrawal, Sachin Chaudhari, Karthik Vaidhyanathan, Venkatesh Choppella
2023 A conf
UMAP
Mina Alipour, Mahyar Tourchi Moghaddam, Karthik Vaidhyanathan, Mikkel Baun Kjærgaard
2023 A* conf
ASE
Shubham Kulkarni, Arya Marda, Karthik Vaidhyanathan
2023 J jnl
CoRR
Shubham Kulkarni, Arya Marda, Karthik Vaidhyanathan
2022 J jnl
IEEE Softw.
Karthik Vaidhyanathan, Anish Chandran, Henry Muccini, Regi Roy
2022 Misc conf
SAC
Federico Di Menna, Henry Muccini, Karthik Vaidhyanathan
2021 B conf
ECSA
Mauro Caporuscio, Marco De Toma, Henry Muccini, Karthik Vaidhyanathan
2021 J jnl
CoRR
Karthik Vaidhyanathan, Antonio Bruno, Eleonora Mendola, Filippo Mignosi, Mahyar Tourchi Moghaddam, Henry Muccini, Monica Nesi
2021 conf
IOT
Martina De Sanctis, Henry Muccini, Karthik Vaidhyanathan
2021 J jnl
CoRR
Mahyar Tourchi Moghaddam, Moamin B. Abughazala, Vittorio Cortellessa, Antinisca Di Marco, Henry Muccini, Fabrizio Rossi, Karthik Vaidhyanathan
2021 B conf
ECSA
Moamin Abughazala, Mahyar Tourchi Moghaddam, Henry Muccini, Karthik Vaidhyanathan
2021 conf
WAIN@ICSE
Henry Muccini, Karthik Vaidhyanathan
2021 J jnl
CoRR
Henry Muccini, Karthik Vaidhyanathan
2020 conf
ICSA Companion
Martina De Sanctis, Henry Muccini, Karthik Vaidhyanathan
2020 B conf
SMARTCOMP
Henry Muccini, Karthik Vaidhyanathan
2020 A conf
ICSA
Javier Cámara, Henry Muccini, Karthik Vaidhyanathan
2020 J jnl
ERCIM News
Henry Muccini, Karthik Vaidhyanathan
2019 conf
ICSA Companion
Henry Muccini, Karthik Vaidhyanathan
2019 conf
ECSA (Companion)
Henry Muccini, Karthik Vaidhyanathan
tests/unit/conftest_binja_stubs.py
← Index tests/unit/conftest_binja_stubs.py python
"""Stubs for binaryninja module so decompiler unit tests can import
without a Binary Ninja license."""

import sys
from unittest.mock import MagicMock
from enum import IntEnum


# Stub binaryninja.enums
class BranchType(IntEnum):
    UnconditionalBranch = 0
    FalseBranch = 1
    TrueBranch = 2
    CallDestination = 3
    FunctionReturn = 4
    SystemCall = 5
    IndirectBranch = 6
    ExceptionBranch = 7
    UnresolvedBranch = 8
    UserDefinedBranch = 9


class InstructionTextTokenType(IntEnum):
    TextToken = 0
    InstructionToken = 1
    RegisterToken = 2
    IntegerToken = 3
    PossibleAddressToken = 4
    BeginMemoryOperandToken = 10
    EndMemoryOperandToken = 11
    FloatingPointToken = 12
    AnnotationToken = 13
    CodeRelativeAddressToken = 14
    ArgumentNameToken = 15
    HexDumpByteValueToken = 16
    HexDumpSkippedByteToken = 17
    HexDumpInvalidByteToken = 18
    HexDumpTextToken = 19
    OpcodeToken = 20
    StringToken = 21
    CharacterConstantToken = 22
    KeywordToken = 23
    TypeNameToken = 24
    FieldNameToken = 25
    NameSpaceToken = 26
    NameSpaceSeparatorToken = 27
    TagToken = 28
    StructOffsetToken = 29
    StructOffsetByteValueToken = 30
    StructureHexDumpTextToken = 31
    GotoLabelToken = 32
    CommentToken = 33
    PossibleValueToken = 34
    PossibleValueTypeToken = 35
    ArrayIndexToken = 36
    IndentationToken = 37
    UnknownMemoryToken = 38
    EnumerationMemberToken = 39
    OperationToken = 40
    BaseStructureOffsetToken = 41
    BaseStructureSeparatorToken = 42
    BraceToken = 43
    PlainTextToken = 44
    CollapsedInformationToken = 45


class SymbolType(IntEnum):
    FunctionSymbol = 0
    ImportAddressSymbol = 1
    ImportedFunctionSymbol = 2
    DataSymbol = 3
    ImportedDataSymbol = 4
    ExternalSymbol = 5
    LibraryFunctionSymbol = 6
    SymbolicFunctionSymbol = 7
    LocalLabelSymbol = 8


class HighLevelILOperation(IntEnum):
    HLIL_NOP = 0
    HLIL_ADD = 1
    HLIL_SUB = 2
    HLIL_MUL = 3
    HLIL_DIVS = 4
    HLIL_NEG = 5
    HLIL_NOT = 6
    HLIL_AND = 7
    HLIL_OR = 8
    HLIL_XOR = 9
    HLIL_LSR = 10
    HLIL_LSL = 11
    HLIL_MODS = 12
    HLIL_IF = 13
    HLIL_GOTO = 14
    HLIL_RET = 15
    HLIL_ASSIGN = 16
    HLIL_CALL = 17
    HLIL_VAR = 18
    HLIL_CONST = 19
    HLIL_BLOCK = 20


class LowLevelILOperation(IntEnum):
    LLIL_NOP = 0
    LLIL_SET_REG = 1
    LLIL_SET_REG_SPLIT = 2
    LLIL_SET_FLAG = 3
    LLIL_LOAD = 4
    LLIL_STORE = 5
    LLIL_PUSH = 6
    LLIL_POP = 7
    LLIL_REG = 8
    LLIL_CONST = 9
    LLIL_CONST_PTR = 10
    LLIL_FLAG = 11
    LLIL_FLAG_BIT = 12
    LLIL_ADD = 13
    LLIL_ADC = 14
    LLIL_SUB = 15
    LLIL_SBB = 16
    LLIL_AND = 17
    LLIL_OR = 18
    LLIL_XOR = 19
    LLIL_LSL = 20
    LLIL_LSR = 21
    LLIL_ASR = 22
    LLIL_ROL = 23
    LLIL_RLC = 24
    LLIL_ROR = 25
    LLIL_RRC = 26
    LLIL_MUL = 27
    LLIL_MULU_DP = 28
    LLIL_MULS_DP = 29
    LLIL_DIVU = 30
    LLIL_DIVU_DP = 31
    LLIL_DIVS = 32
    LLIL_DIVS_DP = 33
    LLIL_MODU = 34
    LLIL_MODS = 35
    LLIL_NEG = 36
    LLIL_NOT = 37
    LLIL_SX = 38
    LLIL_ZX = 39
    LLIL_LOW_PART = 40
    LLIL_JUMP = 41
    LLIL_JUMP_TO = 42
    LLIL_CALL = 43
    LLIL_CALL_SSA = 44
    LLIL_RET = 45
    LLIL_NORET = 46
    LLIL_IF = 47
    LLIL_GOTO = 48
    LLIL_FLAG_COND = 49
    LLIL_CMP_E = 50
    LLIL_CMP_NE = 51
    LLIL_CMP_SLT = 52
    LLIL_CMP_ULT = 53
    LLIL_CMP_SLE = 54
    LLIL_CMP_ULE = 55
    LLIL_CMP_SGE = 56
    LLIL_CMP_UGE = 57
    LLIL_CMP_SGT = 58
    LLIL_CMP_UGT = 59
    LLIL_TEST_BIT = 60
    LLIL_BOOL_TO_INT = 61
    LLIL_TAILCALL = 62
    LLIL_SYSCALL = 63
    LLIL_BP = 64
    LLIL_TRAP = 65
    LLIL_UNDEF = 66
    LLIL_UNIMPL = 67
    LLIL_UNIMPL_MEM = 68


class AnalysisState(IntEnum):
    IdleState = 0
    DisassembleState = 1
    AnalyzeState = 2


def install_binja_stubs():
    """Install binaryninja module stubs into sys.modules.
    Call this BEFORE importing any decompiler modules.
    Idempotent — returns the existing mock if already installed.
    """
    if "binaryninja" in sys.modules and not isinstance(sys.modules["binaryninja"], MagicMock):
        return sys.modules["binaryninja"]
    if "binaryninja" in sys.modules and hasattr(sys.modules["binaryninja"], "_redb_stub"):
        return sys.modules["binaryninja"]

    # Create the main mock
    bn_mock = MagicMock()
    bn_mock._redb_stub = True

    # Wire up enums as real enums (not mocks)
    enums_mod = MagicMock()
    enums_mod.BranchType = BranchType
    enums_mod.InstructionTextTokenType = InstructionTextTokenType
    enums_mod.SymbolType = SymbolType
    enums_mod.HighLevelILOperation = HighLevelILOperation
    enums_mod.LowLevelILOperation = LowLevelILOperation
    enums_mod.AnalysisState = AnalysisState

    bn_mock.enums = enums_mod
    bn_mock.enums.BranchType = BranchType
    bn_mock.enums.InstructionTextTokenType = InstructionTextTokenType
    bn_mock.enums.SymbolType = SymbolType
    bn_mock.enums.HighLevelILOperation = HighLevelILOperation
    bn_mock.enums.LowLevelILOperation = LowLevelILOperation
    bn_mock.enums.AnalysisState = AnalysisState

    # LowLevelILOperation on the top-level module
    bn_mock.LowLevelILOperation = LowLevelILOperation
    bn_mock.LowLevelILInstruction = MagicMock

    # highlevelil sub-module
    hlil_mod = MagicMock()
    hlil_mod.HighLevelILInstruction = type("HighLevelILInstruction", (), {})
    bn_mock.highlevelil = hlil_mod

    # lowlevelil sub-module
    llil_mod = MagicMock()
    llil_mod.LowLevelILAdd = type("LowLevelILAdd", (), {})
    llil_mod.LowLevelILConst = type("LowLevelILConst", (), {})
    llil_mod.LowLevelILConstPtr = type("LowLevelILConstPtr", (), {})
    llil_mod.LowLevelILLoad = type("LowLevelILLoad", (), {})
    llil_mod.LowLevelILLsl = type("LowLevelILLsl", (), {})
    llil_mod.LowLevelILMul = type("LowLevelILMul", (), {})
    llil_mod.LowLevelILPop = type("LowLevelILPop", (), {})
    llil_mod.LowLevelILPush = type("LowLevelILPush", (), {})
    llil_mod.LowLevelILReg = type("LowLevelILReg", (), {})
    llil_mod.LowLevelILStore = type("LowLevelILStore", (), {})
    llil_mod.LowLevelILSub = type("LowLevelILSub", (), {})
    bn_mock.lowlevelil = llil_mod

    # mediumlevelil sub-module
    mlil_mod = MagicMock()
    mlil_mod.MediumLevelILConst = type("MediumLevelILConst", (), {})
    mlil_mod.MediumLevelILConstPtr = type("MediumLevelILConstPtr", (), {})
    bn_mock.mediumlevelil = mlil_mod

    sys.modules["binaryninja"] = bn_mock
    sys.modules["binaryninja.enums"] = enums_mod
    sys.modules["binaryninja.lowlevelil"] = llil_mod
    sys.modules["binaryninja.highlevelil"] = hlil_mod
    sys.modules["binaryninja.mediumlevelil"] = mlil_mod

    return bn_mock


# ============================================================================
# Mock Factories
# ============================================================================

class MockToken:
    """Mock for instruction text tokens."""
    def __init__(self, text, token_type=None):
        self.text = text
        if token_type is None:
            self.type = InstructionTextTokenType.TextToken
        else:
            self.type = token_type

    def __str__(self):
        return self.text


class MockDisassemblyLine:
    """Mock for a disassembly text line."""
    def __init__(self, tokens=None):
        self.tokens = tokens or []

    def __str__(self):
        return "".join(t.text for t in self.tokens)


class MockEdge:
    """Mock for a basic block edge."""
    def __init__(self, source=None, target=None, edge_type=None):
        self.source = source
        self.target = target
        self.type = edge_type


class MockBasicBlock:
    """Mock for a basic block."""
    def __init__(
        self,
        start=0,
        end=0,
        disassembly_text=None,
        outgoing_edges=None,
        incoming_edges=None,
        dominators=None,
        post_dominators=None,
        dominance_frontier=None,
        dominator_tree_children=None,
        instruction_count=None,
    ):
        self.start = start
        self.end = end
        self.disassembly_text = disassembly_text or []
        self.outgoing_edges = outgoing_edges or []
        self.incoming_edges = incoming_edges or []
        self.dominators = dominators if dominators is not None else [self]
        self.post_dominators = post_dominators if post_dominators is not None else [self]
        self.dominance_frontier = dominance_frontier if dominance_frontier is not None else set()
        self.dominator_tree_children = dominator_tree_children or []
        self.instruction_count = instruction_count if instruction_count is not None else len(self.disassembly_text)

    def __iter__(self):
        return iter(self.disassembly_text)


class MockFunction:
    """Mock for a Binary Ninja function."""
    def __init__(
        self,
        name="sub_1000",
        start=0x1000,
        basic_blocks=None,
        instructions=None,
        hlil=None,
        llil=None,
        mlil=None,
        symbol=None,
        is_thunk=False,
        stack_adjustment=0,
        call_sites=None,
        caller_sites=None,
        low_level_il=None,
    ):
        self.name = name
        self.start = start
        self.basic_blocks = basic_blocks or []
        self._instructions = instructions or []
        self.hlil = hlil
        self.llil = llil
        self.mlil = mlil
        self.symbol = symbol
        self.is_thunk = is_thunk
        self.stack_adjustment = stack_adjustment
        self.call_sites = call_sites or []
        self.caller_sites = caller_sites or []
        self.low_level_il = low_level_il

    @property
    def instructions(self):
        return iter(self._instructions)

    def get_basic_block_at(self, addr):
        for bb in self.basic_blocks:
            if bb.start <= addr < bb.end or bb.start == addr:
                return bb
        return self.basic_blocks[0] if self.basic_blocks else None

    def get_regs_read_by(self, addr, arch):
        return []

    def get_regs_written_by(self, addr, arch):
        return []

    def __str__(self):
        return f"uint64_t {self.name}()"


class MockBinaryView:
    """Mock for a Binary Ninja binary view."""
    def __init__(
        self,
        functions=None,
        strings=None,
        arch=None,
    ):
        self.functions = functions or []
        self.strings = strings or []
        self.arch = arch

    def get_segment_at(self, addr):
        return None

    def get_section_at(self, addr):
        return None

    def get_symbol_at(self, addr):
        return None

    def get_functions_at(self, addr):
        return []

    def get_string_at(self, addr):
        return None

    def get_data_var_at(self, addr):
        return None


class MockSymbol:
    """Mock for a Binary Ninja symbol."""
    def __init__(self, symbol_type=None, name="unknown"):
        self.type = symbol_type if symbol_type is not None else SymbolType.FunctionSymbol
        self.name = name
        self.full_name = name


class MockILInstruction:
    """Mock for an IL instruction (LLIL/HLIL)."""
    def __init__(self, operation, operands=None, address=0):
        self.operation = operation
        self.operands = operands or []
        self.address = address


class MockStringEntry:
    """Mock for a Binary Ninja string reference."""
    def __init__(self, value, raw=None, start=0, length=0, string_type=None):
        self.value = value
        self.raw = raw if raw is not None else value.encode("utf-8") if isinstance(value, str) else value
        self.start = start
        self.length = length if length else len(self.raw)
        self.type = string_type or MockStringType("Utf8String")


class MockStringType:
    """Mock for string type."""
    def __init__(self, name="Utf8String"):
        self.name = name