Xiaodong Liang

126 papers B 1C 37Misc 1Journal 46Unranked 41
YearRankTypeTitle / Venue / Authors
2025 J jnl
IEEE Access
Ahmad Siroos, Ebrahim Afjei, Xiaodong Liang, Alireza Sheikhi Fini
2025 C conf
IAS
Abbas Hasani, Xiaodong Liang
2025 J jnl
IEEE Trans. Instrum. Meas.
Mohammadhossein Nazemi, Xiaodong Liang
2025 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Hanguang Su, Yi Cui, Huaguang Zhang, Xiangpeng Xie, Xiaodong Liang, Jiawei Wang
2025 C conf
IAS
Chenyang Wang, Xiaodong Liang, Ian Naften
2025 J jnl
IEEE Access
Alireza Asadi, Xiaodong Liang, Sobhan Sarani, Mohammad Saleh Karimzadeh
2024 C conf
IAS
Saeedreza Jadidi, Xiaodong Liang
2024 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Sobhan Sarani, Ali Nikbahar, Hossein Abootorabi Zarchi, Xiaodong Liang
2024 C conf
IAS
Shahab Karamdel, Xiaodong Liang, Sherif O. Faried
2024 J jnl
IEEE Access
Sarah Allahmoradi, Shahabodin Afrasiabi, Xiaodong Liang, Junbo Zhao, Mohammad Shahidehpour
2024 J jnl
Neurocomputing
Hanguang Su, Xinyang Luan, Huaguang Zhang, Xiaodong Liang, Jinzhu Yang, Jiawei Wang
2024 J jnl
Neurocomputing
Xinyang Luan, Hanguang Su, Huaguang Zhang, Xiaodong Liang, Yuling Liang, Jiawei Wang
2024 J jnl
IEEE Access
Aman Samson Mogos, Xiaodong Liang, C. Y. Chung
2024 J jnl
Comput. Chem. Eng.
Peter Jul-Rasmussen, Arijit Chakraborty, Venkat Venkatasubramanian, Xiaodong Liang, Jakob Kjøbsted Huusom
2024 J jnl
IEEE Trans. Ind. Electron.
Hamidreza Mosaddegh Hesar, Xiaodong Liang, Hossein Abootorabi Zarchi, Mojtaba Ayaz Khoshhava, Amir Khazaee
2024 conf
CCECE
Sarah Allahmoradi, Xiaodong Liang
2024 C conf
IAS
Sobhan Sarani, Xiaodong Liang
2024 conf
CCECE
Shahabodin Afrasiabi, Xiaodong Liang
2024 conf
ICIT
Hamidreza Mosaddegh Hesar, Xiaodong Liang, Salman Abdi
2024 J jnl
IEEE Access
Reza Rashidi, Alireza Hatami, Mansour Moradi, Xiaodong Liang
2024 conf
ICIT
Hamidreza Mosaddegh Hesar, Xiaodong Liang, Salman Abdi
2024 J jnl
IEEE Access
Bo Hu, Yuzhong Gong, Xiaodong Liang, C. Y. Chung, Bram F. Noble, Greg Poelzer
2024 C conf
IAS
Abbas Hasani, Xiaodong Liang, Farhad Haghjoo, Moein Abedini, Majid Sanaye-Pasand, Claus Leth Bak
2024 J jnl
IEEE Trans. Ind. Electron.
Hamidreza Mosaddegh Hesar, Xiaodong Liang, Mohammad Ali Salahmanesh, Mojtaba Ayaz Khoshhava, Salman Abdi
2023 conf
CCECE
Mohammadhossein Nazemi, Shaikat Chowdhury, Alimul Haque Khan, Xiaodong Liang
2023 J jnl
IEEE Access
Alireza Asadi, Mohammad Saleh Karimzadeh, Xiaodong Liang, Mohammad Saeed Mahdavi, Gevork B. Gharehpetian
2023 J jnl
IEEE Access
Mohammadhossein Nazemi, Shaikat Chowdhury, Xiaodong Liang
2023 conf
CCECE
Alireza Asadi, Omid Mohammadpour, Xiaodong Liang
2023 conf
CCECE
Mariana Castillo, Xiaodong Liang, Sherif O. Faried
2023 conf
CCECE
Aman Samson Mogos, Xiaodong Liang, C. Y. Chung
2023 J jnl
IEEE Access
Elisha C. Asiri, C. Y. Chung, Xiaodong Liang
2023 conf
CCECE
Mohammadhossein Nazemi, Xiaodong Liang
2023 J jnl
IEEE Access
Aman Samson Mogos, Osama Aslam Ansari, Xiaodong Liang, C. Y. Chung
2023 conf
CCECE
Aman Samson Mogos, Xiaodong Liang, C. Y. Chung
2023 J jnl
Educ. Inf. Technol.
Liping Jiang, Xiaodong Liang
2023 C conf
IAS
Mohammadhossein Nazemi, Xiaodong Liang, Farhad Haghjoo
2023 C conf
IAS
Chenyang Wang, Shaikat Chowdhury, Xiaodong Liang
2023 conf
CCECE
Mariana Castillo, Xiaodong Liang, Sherif O. Faried
2022 C conf
IAS
Md Abu Saaklayen, Md. Nasmus Sakib Khan Shabbir, Xiaodong Liang, Sherif O. Faried, Mehrnoosh Janbakhsh
2022 C conf
IAS
Md. Nasmus Sakib Khan Shabbir, Chenyang Wang, Xiaodong Liang, Emerson Adajar
2022 conf
ICCSE (1)
Xiaodong Liang, Minyi Ke
2022 conf
CCECE
Masoud Javadi, Xiaodong Liang, Yuzhong Gong, Chi Yung Chung
2022 conf
CCECE
Shahabodin Afrasiabi, Sarah Allahmoradi, Mohammad Salimi, Xiaodong Liang, C. Y. Chung
2022 C conf
IAS
Shah Mohammad Rezwanul Haque Shawon, Xiaodong Liang, Mehrnoosh Janbakhsh
2022 conf
CCECE
Shahabodin Afrasiabi, Sarah Allahmoradi, Mohammad Salimi, Xiaodong Liang, C. Y. Chung
2022 J jnl
IEEE Access
Shahab Karamdel, Xiaodong Liang, Sherif O. Faried, Massimo Mitolo
2022 conf
CCECE
Mohammad Salimi, Yuzhong Gong, Shahabodin Afrasiabi, Xiaodong Liang, Chi Yung Chung
2022 J jnl
IEEE Access
Mithun Madhukumar, Albino Sebastian, Xiaodong Liang, Mohsin Jamil, Md. Nasmus Sakib Khan Shabbir
2022 J jnl
IEEE Access
Mosayeb Afshari Igder, Xiaodong Liang, Massimo Mitolo
2022 C conf
IAS
Mehdi Abbasipour, Xiaodong Liang
2022 conf
CCECE
Masoud Javadi, Soheil Naderi, Xiaodong Liang, Yuzhong Gong, C. Y. Chung
2021 C conf
IECON
Zahra Saadatizadeh, Xiaodong Liang
2021 J jnl
IEEE Access
Mehdi Abbasipour, Mosayeb Afshari Igder, Xiaodong Liang
2021 J jnl
IEEE Access
Shafi Md Kawsar Zaman, Xiaodong Liang
2021 J jnl
Remote. Sens.
Wei He, Xiaodong Liang, Lu Deng, Xuan Kong, Hong Xie
2021 conf
CCECE
Mehdi Abbasipour, Mosayeb Afshari Igder, Xiaodong Liang
2021 J jnl
IEEE Access
Chenyang Wang, Xiaodong Liang, Emerson Adajar
2021 J jnl
IEEE Access
Zahra Saadatizadeh, Pedram Chavoshipour Heris, Xiaodong Liang, Ebrahim Babaei
2021 J jnl
IEEE Access
Shafi Md Kawsar Zaman, Xiaodong Liang, Weixing Li
2021 C conf
IAS
Xiaodong Liang, Mehdi Abbasipour
2021 J jnl
Int. J. Circuit Theory Appl.
Pedram Chavoshipour Heris, Zahra Saadatizadeh, Mehran Sabahi, Xiaodong Liang
2021 C conf
IAS
Xiaodong Liang, Md Abu Saaklayen, Mosayeb Afshari Igder, Shah Mohammad Rezwanul Haque Shawon, Sherif O. Faried
2021 J jnl
Int. J. Circuit Theory Appl.
Zahra Saadatizadeh, Pedram Chavoshipour Heris, Mehran Sabahi, Xiaodong Liang
2021 conf
CCECE
Aman Samson Mogos, Md. Salauddin, Xiaodong Liang, Chi Yung Chung
2021 C conf
IECON
Zahra Saadatizadeh, Xiaodong Liang
2020 J jnl
IEEE Trans. Ind. Informatics
Mahamad Nabab Alam, Saikat Chakrabarti, Xiaodong Liang
2020 conf
CCECE
Md. Nasmus Sakib Khan Shabbir, Xiaodong Liang
2020 C conf
IAS
Md. Nasmus Sakib Khan Shabbir, Xiaodong Liang, Weixing Li, Nahidul Khan
2020 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Hanguang Su, Huaguang Zhang, Xiaodong Liang, Chong Liu
2020 J jnl
IEEE Access
Shafi Md Kawsar Zaman, Xiaodong Liang, Lihong Zhang
2020 conf
CCECE
Shafi Md Kawsar Zaman, Xiaodong Liang, Lihong Zhang
2020 J jnl
Discret. Appl. Math.
Tianlong Ma, Jinling Wang, Mingzu Zhang, Xiaodong Liang
2020 C conf
IAS
Chenyang Wang, Xiaodong Liang, Emerson Adajar, Paul Loewen
2019 conf
CCECE
Shafi Md Kawsar Zaman, Hla U. May Marma, Xiaodong Liang
2019 conf
CCECE
Muhammad Sifatul Alam Chowdhury, Xiaodong Liang
2019 C conf
IAS
Hla U. May Marma, Xiaodong Liang, Weixing Li, Huaguang Zhang
2019 conf
CCECE
Muhammad Sifatul Alam Chowdhury, Xiaodong Liang
2019 J jnl
J. Frankl. Inst.
Ji Han, Huaguang Zhang, Xiaodong Liang, Rui Wang
2019 J jnl
IEEE Trans. Ind. Informatics
Yushuai Li, Huaguang Zhang, Xiaodong Liang, Bonan Huang
2019 C conf
IAS
Chenyang Wang, Xiaodong Liang, Fabio Freschi
2019 B conf
EuroGP
Yu Zhang, Ting Hu, Xiaodong Liang, Mohammad Zawad Ali, Md. Nasmus Sakib Khan Shabbir
2019 C conf
IAS
Xiaodong Liang, Mohammad Zawad Ali, Huaguang Zhang
2019 conf
CCECE
Matthew Carter, Xiaodong Liang
2019 conf
CCECE
Mohammad Zawad Ali, Xiaodong Liang
2019 C conf
IAS
Mohammad Zawad Ali, Md. Nasmus Sakib Khan Shabbir, Shafi Md Kawsar Zaman, Xiaodong Liang
2019 J jnl
Appl. Soft Comput.
Kun Zhang, Huaguang Zhang, Xiaodong Liang, Zhiliang Wang
2019 conf
CCECE
Muhammad Sifatul Alam Chowdhury, Xiaodong Liang
2018 C conf
IAS
Md. Nasmus Sakib Khan Shabbir, Xiaodong Liang, Weixing Li, Anh Minh Le, Nahidul Khan
2018 conf
CCECE
Md. Nasmus Sakib Khan Shabbir, Mohammad Zawad Ali, Muhammad Sifatul Alam Chowdhury, Xiaodong Liang
2018 conf
CCECE
Muhammad Sifatul Alam Chowdhury, Md. Arman Uddin, Khandakar Abdulla-Al-Mamun, Xiaodong Liang, Amir Ahadi
2018 J jnl
Appl. Math. Comput.
Laihuan Chen, Jixiang Meng, Yingzhi Tian, Xiaodong Liang, Fengxia Liu
2018 conf
CCECE
Kenneth Edomwandekhoe, Xiaodong Liang
2018 C conf
IAS
Xiaodong Liang, Muhammad Sifatul Alam Chowdhury
2018 C conf
IAS
Mohammad Zawad Ali, Md. Nasmus Sakib Khan Shabbir, Xiaodong Liang, Yu Zhang, Ting Hu
2018 conf
CCECE
Md. Nasmus Sakib Khan Shabbir, Xiaodong Liang
2018 conf
CCECE
Amir Ahadi, Xiaodong Liang
2018 conf
CCECE
Mohammad Zawad Ali, Md. Nasmus Sakib Khan Shabbir, Muhammad Sifatul Alam Chowdhury, Arko Ghosh, Xiaodong Liang
2018 J jnl
Theor. Comput. Sci.
Xiaomin Hu, Yingzhi Tian, Xiaodong Liang, Jixiang Meng
2018 conf
CCECE
Amir Ahadi, Xiaodong Liang
2017 conf
ICIT
Amir Ahadi, Xiaodong Liang
2017 J jnl
J. Comb. Optim.
Xiaodong Liang, Rui Wang, Jixiang Meng
2017 C conf
IAS
Xiaodong Liang, Kenneth Edomwandekhoe
2017 C conf
IAS
Chowdhury Andalib-Bin-Karim, Xiaodong Liang, Huaguang Zhang
2017 conf
ICIT
Chowdhury Andalib-Bin-Karim, Xiaodong Liang, Hasab-Ul Alam Chowdhury
2017 C conf
IAS
Xiaodong Liang, Chowdhury Andalib-Bin-Karim
2017 J jnl
Theor. Comput. Sci.
Xiaomin Hu, Yingzhi Tian, Xiaodong Liang, Jixiang Meng
2017 conf
ICIT
Amir Ahadi, Syed Enam Reza, Xiaodong Liang
2017 J jnl
Discret. Appl. Math.
Xiaodong Liang, Heping Zhang
2016 conf
IC-NIDC
Xiaodong Liang, Xiaofeng Qiu
2016 C conf
IAS
Xiaodong Liang
2016 C conf
IAS
Xiaodong Liang, Chenyang Wang, Manitoba Hydro
2016 C conf
IAS
Xiaodong Liang, Scott A. Wallace, Duc Nguyen
2016 J jnl
Theor. Comput. Sci.
Xiaomin Hu, Yingzhi Tian, Xiaodong Liang, Jixiang Meng
2015 C conf
IAS
Omid Ghoreishi, Xiaodong Liang, Wilsun Xu
2015 conf
IGSC
Duc Nguyen, Richard Barella, Scott A. Wallace, Xinghui Zhao, Xiaodong Liang
2015 C conf
IAS
Xiaodong Liang, John Hofman
2014 C conf
IAS
Xiaodong Liang, Bagen Bagen, David Wenzhong Gao
2014 C conf
IAS
Xiaodong Liang, Narayan C. Kar, Joe Liu
2013 C conf
IAS
Xiaodong Liang, Wilsun Xu
2012 J jnl
Graphs Comb.
Yingzhi Tian, Jixiang Meng, Xiaodong Liang
2010 conf
CCECE
Xiaodong Liang, Joe Liu
2008 J jnl
Ars Comb.
Xiaodong Liang, Jixiang Meng
2008 C conf
IAS
Xiaodong Liang, William Michael Jackson
2007 Misc conf
International Conference on Computational Science (3)
Xiaodong Liang, Jixiang Meng
2007 J jnl
Graphs Comb.
Xiaodong Liang, Jixiang Meng, Zhao Zhang
2006 conf
CCECE
Xiaodong Liang, Yilmaz Luy
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)