Jakob Stoustrup

146 papers C 58Journal 34Unranked 54
YearRankTypeTitle / Venue / Authors
2025 J jnl
IEEE Trans. Control. Syst. Technol.
Mohamad Al Ahdab, Torben Knudsen, Jakob Stoustrup, John Leth
2023 conf
CCTA
Mohamad Al Ahdab, Torben Knudsen, Jakob Stoustrup, John Leth
2023 J jnl
IEEE Control. Syst. Lett.
Mohamad Al Ahdab, Torben Knudsen, Jakob Stoustrup, John Leth
2023 J jnl
Eur. J. Oper. Res.
Martina Fischetti, Matteo Fischetti, Jakob Stoustrup
2022 conf
CDC
Mohamad Al Ahdab, Torben Knudsen, Jakob Stoustrup, John Leth
2022 J jnl
CoRR
Mohamad Al Ahdab, Torben Knudsen, Jakob Stoustrup, John Leth
2021 J jnl
IEEE Trans. Smart Grid
Mahmood Khatibi, Jan Dimon Bendtsen, Jakob Stoustrup, Tommy Moelbak
2021 J jnl
IEEE Control. Syst. Lett.
Henrik Niemann, Jakob Stoustrup, Niels Kjølstad Poulsen
2021 J jnl
IEEE Trans. Ind. Electron.
Yonghao Gui, Frede Blaabjerg, Xiongfei Wang, Jan Dimon Bendtsen, Dongsheng Yang, Jakob Stoustrup
2021 conf
EDCC Workshops
Yonghao Gui, Hans-Peter Schwefel, Jan Dimon Bendtsen, Jakob Stoustrup
2020 C conf
IECON
Yonghao Gui, Jan Dimon Bendtsen, Jakob Stoustrup
2019 C conf
ACC
Glenn Andreasen, Jakob Stoustrup, Roozbeh Izadi-Zamanabadi, Ángel Á. Pardiñas, Armin Hafner
2019 conf
CCTA
Joakim Børlum Petersen, Jan Dimon Bendtsen, Jakob Stoustrup
2018 conf
SmartGridComm
Joakim Borlum Petersen, Jan Dimon Bendtsen, Pierre Vogler-Finck, Jakob Stoustrup
2018 conf
CCTA
Joakim Borlum Petersen, Jan Dimon Bendtsen, Jakob Stoustrup
2017 J jnl
IEEE Trans Autom. Sci. Eng.
Di Wu, Tao Yang, Anton A. Stoorvogel, Jakob Stoustrup
2017 J jnl
IEEE Trans. Control. Syst. Technol.
Rasmus Pedersen, John Schwensen, Benjamin Biegel, Torben Green, Jakob Stoustrup
2017 J jnl
IEEE Trans. Smart Grid
Samira Rahnama, Jan Dimon Bendtsen, Jakob Stoustrup, Henrik Rasmussen
2016 C conf
ACC
Jakob Stoustrup
2016 C conf
ACC
Anuradha M. Annaswamy, Jakob Stoustrup, Aranya Chakrabortty
2016 J jnl
Proc. IEEE
Benjamin Biegel, Palle Andersen, Jakob Stoustrup, Lars Henrik Hansen, Anders Birke
2015 J jnl
IEEE Trans. Control. Syst. Technol.
Pedro Casau, Paulo Andre Nobre Rosa, Seyed Mojtaba Tabatabaeipour, Carlos Silvestre, Jakob Stoustrup
2015 J jnl
IEEE Trans. Control. Syst. Technol.
Peter Fogh Odgaard, Jakob Stoustrup
2015 conf
CDC
He Hao, Jianming Lian, Karanjit Kalsi, Jakob Stoustrup
2015 J jnl
Annu. Rev. Control.
Peter Fogh Odgaard, Jakob Stoustrup
2015 J jnl
IEEE Trans. Control. Syst. Technol.
Kasper Vinther, Henrik Rasmussen, Roozbeh Izadi-Zamanabadi, Jakob Stoustrup, Andrew G. Alleyne
2015 conf
ECC
Samira Rahnama, Jan Dimon Bendtsen, Jakob Stoustrup, Henrik Rasmussen
2014 C conf
CCA
Peter Fogh Odgaard, Jakob Stoustrup
2014 C conf
ACC
Henrik Niemann, Jakob Stoustrup, Niels Kjølstad Poulsen
2014 J jnl
IEEE Trans. Smart Grid
Anuradha Annaswamy, Duncan S. Callaway, Joseph Chow, Christopher DeMarco, David J. Hill, Pramod P. Khargonekar, Anders Rantzer, Jakob Stoustrup
2014 J jnl
IEEE Trans. Smart Grid
Mette K. Petersen, Lars Henrik Hansen, Jan Dimon Bendtsen, Kristian Edlund, Jakob Stoustrup
2014 C conf
ACC
Seyed Ehsan Shafiei, Jakob Stoustrup, Henrik Rasmussen
2014 J jnl
Simul.
Kresten K. Sørensen, Jens Dalsgaard Nielsen, Jakob Stoustrup
2013 conf
CDC
Seyed Ehsan Shafiei, Roozbeh Izadi-Zamanabadi, Henrik Rasmussen, Jakob Stoustrup
2013 C conf
CCA
Kasper Vinther, Henrik Rasmussen, Roozbeh Izadi-Zamanabadi, Jakob Stoustrup, Andrew G. Alleyne
2013 conf
ECC
Seyed Ehsan Shafiei, Jakob Stoustrup, Henrik Rasmussen
2013 C conf
ACC
Mette K. Petersen, Kristian Edlund, Lars Henrik Hansen, Jan Dimon Bendtsen, Jakob Stoustrup
2013 conf
CDC
Benjamin Biegel, Lars Henrik Hansen, Jakob Stoustrup, Palle Andersen, Silas Harbo
2013 conf
ISGT Europe
Morten Juelsgaard, Luminita Cristiana Totu, Seyed Ehsan Shafiei, Rafael Wisniewski, Jakob Stoustrup
2013 C conf
ACC
Rasmus Pedersen, John Schwensen, Senthuran Sivabalan, Chiara Corazzol, Seyed Ehsan Shafiei, Kasper Vinther, Jakob Stoustrup
2013 C conf
CCA
Benjamin Biegel, Daria Madjidian, Vedrana Spudic, Anders Rantzer, Jakob Stoustrup
2013 C conf
CCA
Benjamin Biegel, Palle Andersen, Tom Søndergaard Pedersen, Kirsten Mølgaard Nielsen, Jakob Stoustrup, Lars Henrik Hansen
2013 C conf
CCA
Peter Fogh Odgaard, Jakob Stoustrup
2013 J jnl
IEEE Trans. Control. Syst. Technol.
Peter Fogh Odgaard, Jakob Stoustrup, Michel Kinnaert
2013 C conf
ACC
Benjamin Biegel, Palle Andersen, Jakob Stoustrup, Lars Henrik Hansen, David Victor Tackie
2013 conf
CDC
Samira Rahnama, Jakob Stoustrup, Henrik Rasmussen
2013 conf
ISGT Europe
Benjamin Biegel, Palle Andersen, Jakob Stoustrup, Mathias Baekdal Madsen, Lars Henrik Hansen
2013 conf
CDC
Mette K. Petersen, Lars Henrik Hansen, Jan Dimon Bendtsen, Kristian Edlund, Jakob Stoustrup
2013 conf
ECC
Seyed Ehsan Shafiei, Henrik Rasmussen, Jakob Stoustrup
2013 C conf
CCA
Samira Rahnama, Jakob Stoustrup, Henrik Rasmussen
2013 C conf
ACC
Seyed Ehsan Shafiei, Henrik Rasmussen, Jakob Stoustrup
2013 J jnl
IEEE Trans. Control. Syst. Technol.
Jan Dimon Bendtsen, Klaus Trangbaek, Jakob Stoustrup
2013 C conf
ACC
Benjamin Biegel, Jakob Stoustrup, Palle Andersen, Lars Henrik Hansen
2013 J jnl
IEEE Trans. Smart Grid
Benjamin Biegel, Lars Henrik Hansen, Palle Andersen, Jakob Stoustrup
2013 C conf
CCA
Fabiano Daher Adegas, Ivan B. Sonderby, Morten H. Hansen, Jakob Stoustrup
2013 conf
ECC
Seyed Mojtaba Tabatabaeipour, Jakob Stoustrup
2013 conf
ECC
Benjamin Biegel, Palle Andersen, Tom Søndergaard Pedersen, Kirsten Mølgaard Nielsen, Jakob Stoustrup, Lars Henrik Hansen
2013 J jnl
Eur. J. Control
Jakob Stoustrup
2012 C conf
ACC
Lluis Diaz-Guerra, Fabiano Daher Adegas, Jakob Stoustrup, Miriam Monros
2012 C conf
ACC
Hamid Reza Shaker, Jakob Stoustrup
2012 conf
CDC
Fatemeh Tahersima, Jakob Stoustrup, Henrik Rasmussen, Soroush Afkhami Meybodi
2012 conf
ROCOND
Fabiano Daher Adegas, Jakob Stoustrup
2012 C conf
ACC
Benjamin Biegel, Jakob Stoustrup, Jan Bendtsen, Palle Andersen
2012 C conf
ACC
Mette K. Petersen, Jan Dimon Bendtsen, Jakob Stoustrup
2012 conf
ROCOND
Michael Hansen, Jakob Stoustrup, Jan Dimon Bendtsen
2012 C conf
CCA
Kasper Vinther, Henrik Rasmussen, Roozbeh Izadi-Zamanabadi, Jakob Stoustrup
2012 C conf
ACC
Fabiano Daher Adegas, Jakob Stoustrup
2012 C conf
CCA
Kasper Vinther, Henrik Rasmussen, Roozbeh Izadi-Zamanabadi, Jakob Stoustrup
2011 conf
CDC/ECC
Fatemeh Tahersima, Jakob Stoustrup, Soroush Afkhami Meybodi, Henrik Rasmussen
2011 C conf
CCA
Michael Hansen, Jakob Stoustrup, Jan Dimon Bendtsen
2011 conf
CDC/ECC
Fatemeh Tahersima, Jakob Stoustrup, Henrik Rasmussen
2011 conf
CDC/ECC
Klaus Trangbaek, Mette K. Petersen, Jan Dimon Bendtsen, Jakob Stoustrup
2011 conf
CDC/ECC
Johannes Friis, Ebbe Nielsen, Jesper Bonding, Fabiano Daher Adegas, Jakob Stoustrup, Peter Fogh Odgaard
2011 C conf
CCA
Fatemeh Tahersima, Jakob Stoustrup, Henrik Rasmussen
2011 C conf
ACC
Fabiano Daher Adegas, Jakob Stoustrup
2011 C conf
CCA
Benjamin Biegel, Morten Juelsgaard, Matt Kraning, Stephen P. Boyd, Jakob Stoustrup
2010 C conf
ACC
Christoffer Sloth, Thomas Esbensen, Jakob Stoustrup
2010 J jnl
Int. J. Syst. Sci.
Jakob Stoustrup, Henrik Niemann
2010 C conf
CCA
Honglian Deng, Lars Bo Larsen, Jakob Stoustrup, Henrik Rasmussen
2010 C conf
CCA
Peter Fogh Odgaard, Paul Bach Thøgersen, Jakob Stoustrup
2010 conf
CDC
Jan Dimon Bendtsen, Klaus Trangbaek, Jakob Stoustrup
2010 conf
CDC
Axel Gottlieb Michelsen, Jakob Stoustrup
2010 conf
CASE
Fatemeh Tahersima, Jakob Stoustrup, Henrik Rasmussen, Peter Gammeljord Nielsen
2010 C conf
CCA
Peter Fogh Odgaard, Jakob Stoustrup
2009 conf
CCA/ISIC
Michael Odgaard Kuch Niss, Thomas Esbensen, Christoffer Sloth, Jakob Stoustrup, Peter Fogh Odgaard
2009 conf
ECC
Honglian Deng, Lars Finn Sloth Larsen, Jakob Stoustrup, Henrik Rasmussen
2009 C conf
ACC
Jakob Stoustrup, Mohammad Komareji
2009 conf
ECC
Jakob Stoustrup, Klaus Trangbaek, Jan Dimon Bendtsen
2009 conf
CCA/ISIC
Honglian Deng, Lars Finn Sloth Larsen, Jakob Stoustrup, Henrik Rasmussen
2009 J jnl
IEEE Trans. Control. Syst. Technol.
Peter Fogh Odgaard, Jakob Stoustrup
2009 conf
ECC
Axel Gottlieb Michelsen, Jakob Stoustrup, Roozbeh Izadi-Zamanabadi
2009 J jnl
Eur. J. Control
Jakob Stoustrup
2009 conf
ECC
Jakob Stoustrup
2009 conf
CCA/ISIC
Christoffer Sloth, Thomas Esbensen, Michael Odgaard Kuch Niss, Jakob Stoustrup, Peter Fogh Odgaard
2009 conf
CCA/ISIC
Mohammad Komareji, Jakob Stoustrup, Henrik Rasmussen, Nils Bidstrup, Peter Svendsen, Finn Nielsen
2008 J jnl
IEEE Trans. Control. Syst. Technol.
Peter Fogh Odgaard, Jakob Stoustrup, Palle Andersen, Enrique Vidal
2008 conf
CDC
Jan Dimon Bendtsen, Klaus Trangbaek, Jakob Stoustrup
2008 C conf
ACC
J. Cai, Jakob Stoustrup
2008 C conf
CCA
Kresten K. Sørensen, Jakob Stoustrup
2008 C conf
ACC
J. Cai, Jørgen Bauck Jensen, Sigurd Skogestad, Jakob Stoustrup
2008 C conf
ACC
Mohammad Komareji, Jakob Stoustrup, Henrik Rasmussen, Nils Bidstrup, Peter Svendsen, Finn Nielsen
2008 C conf
CCA
Mohsen Soltani, Roozbeh Izadi-Zamanabadi, Jakob Stoustrup
2007 C conf
ACC
Zhuang Wu, Murali R. Rajamani, James B. Rawlings, Jakob Stoustrup
2007 C conf
CCA
Kasper Zinck Ostergaard, Per Brath, Jakob Stoustrup
2007 C conf
ACC
Mohammad Komareji, Jakob Stoustrup, H. Rasmussen, Nils Bidstrup, Peter Svendsen, F. Nielsen
2007 conf
CDC
Peter Fogh Odgaard, Jakob Stoustrup
2007 C conf
ACC
Peter Fogh Odgaard, Jakob Stoustrup, B. Mataji
2006 J jnl
IEEE Trans. Control. Syst. Technol.
Peter Fogh Odgaard, Jakob Stoustrup, Palle Andersen, Henrik Fløe Mikkelsen
2006 C conf
ACC
Jakob Stoustrup, Henrik Niemann
2006 conf
CDC
Klaus Trangbaek, Jakob Stoustrup, Jan Dimon Bendtsen
2006 conf
CDC
Zhuang Wu, Jakob Stoustrup, Klaus Trangbaek, Per Heiselberg, Martin Riisgaard Jensen
2005 conf
CDC/ECC
Peter Fogh Odgaard, Jakob Stoustrup, Enrique Vidal
2005 conf
CDC/ECC
Peter Fogh Odgaard, Jakob Stoustrup, Palle Andersen, M. Victor Wickerhauser, Enrique Vidal
2004 conf
CDC
Lars Finn Sloth Larsen, Claus Thybo, Jakob Stoustrup, Henrik Rasmussen
2004 C conf
CCA
Peter Fogh Odgaard, Jakob Stoustrup, Palle Andersen, Mladen Victor Wickerhauser, Henrik Fløe Mikkelsen
2004 C conf
ACC
Jakob Stoustrup, Vincent D. Blondel
2004 J jnl
IEEE Trans. Biomed. Eng.
Torben Knudsen, Henrik Elmer, Morten H. Knudsen, Niels-Henrik Holstein-Rathlou, Jakob Stoustrup
2004 C conf
ACC
Peter Fogh Odgaard, Jakob Stoustrup, Palle Andersen, Henrik Fløe Mikkelsen
2004 C conf
ACC
Jakob Stoustrup, Henrik Niemann
2004 J jnl
IEEE Trans. Autom. Control.
Jakob Stoustrup, Vincent D. Blondel
2004 C conf
ACC
Henrik Niemann, Jakob Stoustrup
2003 conf
CDC
Jan Dimon Bendtsen, Jakob Stoustrup, Klaus Trangbzk
2003 conf
ECC
Lars S. Larsen, Claus Thybo, Jakob Stoustrup, Henrik Rasmussen
2003 conf
CDC
Henrik Niemann, Jakob Stoustrup
2003 conf
CDC
Peter Fogh Odgaard, Jakob Stoustrup, Palle Andersen, Henrik Fløe Mikkelsen
2003 C conf
ACC
Peter Fogh Odgaard, Jakob Stoustrup, Palle Andersen, Henrik Fløe Mikkelsen
2003 conf
CDC
Jan Dimon Bendtsen, Jakob Stoustrup, Klaus Trangbrek
2003 C conf
ACC
Jakob Stoustrup, Henrik Niemann, Anders la Cour-Harbo
2003 conf
ICC
Joachim Dahl, Bernard H. Fleury, Søren Holdt Jensen, Jakob Stoustrup
2003 C conf
ACC
Enrique Vidal, Jakob Stoustrup, Palle Andersen, Tom Søndergaard Pedersen, Henrik Fløe Mikkelsen
2002 C conf
ACC
Paulo A. S. A. Felicio, Jakob Stoustrup, Henrik Niemann, Pedro Lourtie
2002 conf
CDC
Henrik Niemann, Jakob Stoustrup
2001 C conf
ACC
Henrik Niemann, Jakob Stoustrup
2001 conf
ECC
Jakob Stoustrup, Henrik Niemann
2001 C conf
ACC
Rafal Wigniewski, Jakob Stoustrup
2001 C conf
ACC
Enrique Vidal, Jakob Stoustrup, Palle Andersen, Tom Søndergaard Pedersen, Henrik Fløe Mikkelsen
2000 conf
CDC
Henrik Niemann, Jakob Stoustrup
2000 C conf
ACC
Palle Andersen, Tom Søndergaard Pedersen, Jakob Stoustrup, J. Svensen, B. Lovmand, Nils Bidstrup
2000 conf
CDC
Zhenyu Yang, Jakob Stoustrup
2000 C conf
ACC
Henrik Niemann, Jakob Stoustrup
1999 conf
ECC
Jakob Stoustrup, Guglielmo S. Aglietti, Eric Rogers, R. S. Langley, Stephen B. Gabriel
1997 J jnl
Proc. IEEE
Jakob Stoustrup
1996 J jnl
IEEE Trans. Autom. Control.
Bahram Shafai, Stuart Beale, Hans Henrik Niemann, Jakob Stoustrup
1996 J jnl
IEEE Trans. Autom. Control.
Jakob Stoustrup
1995 J jnl
Autom.
Kemin Zhou, Pramod P. Khargonekar, Jakob Stoustrup, Hans Henrik Niemann
1993 J jnl
Autom.
Jakob Stoustrup
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