Xia Chen

148 papers A* 4A 1B 7C 5Misc 2Journal 95Unranked 33
YearRankTypeTitle / Venue / Authors
2026 J jnl
Biomed. Signal Process. Control.
Leixin Hong, Danqun Xiong, Xia Chen, Yeqing Zhang, Jianjun Yan, Xiangdong Xu, Rui Guo
2026 A* conf
CHI
Shiwei Wu, Ziyao Gao, Zhendong He, Zongtan He, Zhupeng Huang, Xia Chen, Wei Zeng, Xiaojuan Ma, Zhenhui Peng
2026 J jnl
CoRR
Shiwei Wu, Ziyao Gao, Zhendong He, Zongtan He, Zhupeng Huang, Xia Chen, Wei Zeng, Xiaojuan Ma, Zhenhui Peng
2026 J jnl
Frontiers Comput. Neurosci.
Han He, Ruinan Chen, Yixiang Wang, Xia Chen
2026 A* conf
CHI
Mingyuan Zhong, Xia Chen, Davin Win Kyi, Chen Li, James Fogarty, Jacob O. Wobbrock
2025 J jnl
J. Comput. Biol.
Xia Chen, Hao Nie, Quanwei Chen, Xiang Zhang, Zixing He, Xiuxiu Chao, Weihao Ou, Xiangzheng Fu, Haowen Chen
2025 J jnl
IEEE Trans. Serv. Comput.
Xia Chen, Yugen Du, Guoxing Tang, Fan Chen, Yingwei Luo, Hanting Wang
2025 B conf
IJCNN
Yingwei Luo, Yugen Du, Shuo Shi, Xia Chen, Guoxing Tang
2025 J jnl
Briefings Bioinform.
Xinyue Cui, Lingyu Ge, Xia Chen, Zexin Lv, Suhui Wang, Xiaogen Zhou, Guijun Zhang
2025 J jnl
CoRR
Xia Chen
2025 J jnl
CoRR
Xia Chen
2025 J jnl
CoRR
Xia Chen, Ruiji Sun, Philipp Geyer, André Borrmann, Stefano Schiavon
2025 J jnl
CoRR
Xiaoxuan Wang, Bo Liu, Song Jiang, Jingzhou Liu, Jingyuan Qi, Xia Chen, Baosheng He
2025 J jnl
CoRR
Guoxing Tang, Yugen Du, Xia Chen, Yingwei Luo, Benchi Ma
2025 J jnl
IEEE Trans. Serv. Comput.
Xia Chen, Yugen Du, Yunpeng Han, Jingjing Huang, Zhongyang Qian
2025 J jnl
IET Image Process.
Juan Zhou, Ruiyang Tao, Weiqiang Zhou, Xia Chen, Xiong Li
2025 J jnl
Int. J. Comput. Sci. Eng.
Xiuju Gao, Chenxing Xia, Xia Chen, Jianhua Cui
2025 C conf
SEKE
Yunpeng Han, Yugen Du, Xia Chen, Yingwei Luo, Guoxing Tang, Benchi Ma, Jingjing Huang
2025 J jnl
Informatica (Slovenia)
Weiyong Gao, Xia Chen
2025 J jnl
IEEE Trans. Instrum. Meas.
Guolong Shi, Wenhui Wu, Baiqiang Yin, Ke Li, Min Li, Xianghu Tang, Xia Chen
2025 J jnl
IEEE Access
Peng Bian, Jiaming Fan, Yang Liu, Xia Chen, Yu Wang
2025 J jnl
CoRR
Xia Chen, Yugen Du, Guoxing Tang, Yingwei Luo, Benchi Ma
2025 J jnl
CoRR
Xia Chen, Xinyue Chen, Weixian Hu, Haojia Zheng, YuJun Qian, Zhenhui Peng
2025 J jnl
Proc. ACM Hum. Comput. Interact.
Xia Chen, Xinyue Chen, Weixian Hu, Haojia Zheng, YuJun Qian, Zhenhui Peng
2025 J jnl
IEEE Trans. Syst. Man Cybern. Syst.
Mengyang Xu, Xia Chen, Fei Hao
2025 A* conf
CHI
Mingyuan Zhong, Ruolin Chen, Xia Chen, James Fogarty, Jacob O. Wobbrock
2025 J jnl
CoRR
Mingyuan Zhong, Ruolin Chen, Xia Chen, James Fogarty, Jacob O. Wobbrock
2025 J jnl
Int. J. Intell. Inf. Database Syst.
Yindong Dong, Yu Zhang, Guodong Wu, Xia Chen, Lijing Tu, Guohua Fan
2025 J jnl
CoRR
Mingyuan Zhong, Xia Chen, Davin Win Kyi, Chen Li, James Fogarty, Jacob O. Wobbrock
2024 J jnl
IEEE Trans. Signal Process.
Wenfei Cao, Xia Chen, Shoucheng Yan, Zeyue Zhou, Andrzej Cichocki
2024 conf
ISBRA (1)
Xia Chen, Hao Nie, Quanwei Chen, Xiang Zhang, Zixing He, Xiuxiu Chao, Weihao Ou, Xiangzheng Fu, Haowen Chen
2024 conf
ISSRE (Workshops)
Shenglin Zhang, Xiao Xiong, Mengyao Li, Yongqian Sun, Yongxin Zhao, Xia Chen, Bowen Deng, Dan Pei
2024
Xia Chen
2024 J jnl
Adv. Eng. Informatics
Philipp Geyer, Manav Mahan Singh, Xia Chen
2024 J jnl
J. Comput. Assist. Learn.
Liping Jiang, Menglei Lv, Mengmeng Cheng, Xia Chen, Changhong Peng
2024 C conf
SEKE
Guoxing Tang, Yugen Du, Xia Chen, Yingwei Luo, Benchi Ma
2024 A conf
ICWS
Xia Chen, Yugen Du, Fan Chen, Hanting Wang, Yingwei Luo, Benchi Ma, Guoxing Tang
2024 J jnl
CoRR
Xia Chen, Guoquan Lv, Xinwei Zhuang, Carlos Duarte, Stefano Schiavon, Philipp Geyer
2024 J jnl
CoRR
Xia Chen, Alexander Rex, Janis Woelke, Christoph Eckert, Boris Bensmann, Richard Hanke-Rauschenbach, Philipp Geyer
2024 conf
ISAIMS
Zhaolong He, Shiqiang Xu, Xia Chen, Haoran Jia, Min Wu, Wenhao Zhao, Wen Hu
2024 J jnl
IMA J. Math. Control. Inf.
Xiaoya Guo, Xia Chen, Lu Fu
2024 C conf
SEKE
Xia Chen, Yugen Du, Guoxing Tang, Yingwei Luo, Benchi Ma
2024 J jnl
Int. J. Inf. Technol. Syst. Approach
Xia Chen, Lina Guo, Qamar Ul Islam
2024 J jnl
Manag. Sci.
Xia Chen, Qiang Cheng, Ting Luo
2024 J jnl
Eng. Appl. Artif. Intell.
Feng Wang, Rui Song, Hu Yu, Ao Zhang, Linwei Wang, Xia Chen
2024 J jnl
Biomed. Signal Process. Control.
Xia Chen, Xiangbin Teng, Han Chen, Yafeng Pan, Philipp Geyer
2024 J jnl
Knowl. Based Syst.
Xia Chen, Manav Mahan Singh, Philipp Geyer
2023 J jnl
CoRR
Xia Chen, Xiaoye Cai, Alexander Kümpel, Dirk Müller, Philipp Geyer
2023 J jnl
CoRR
Zihao Huang, Xia Chen, Yue Wang, Weixing Xin, Xingtong Lin, Huizhen Li, Haowen Chen, Yizhen Lao
2023 J jnl
Sensors
Aslan B. Wong, Ziqi Huang, Xia Chen, Kaishun Wu
2023 conf
CECNet
Liping Jiang, Xia Chen, Mengmeng Cheng
2023 J jnl
J. Syst. Sci. Complex.
Changming Yin, Mingyao Ai, Xia Chen, Xiangshun Kong
2023 conf
WCSP
Yifei Xin, Weiwei Xia, Jun Wu, Xia Chen, Feng Yan, Lianfeng Shen
2023 J jnl
IEEE Trans. Ind. Electron.
Cheng Wang, Xuehua Wang, Yuying He, Donghua Pan, Hao Zhang, Xinbo Ruan, Xia Chen
2023 J jnl
CoRR
Xia Chen, Philipp Geyer
2023 J jnl
J. Frankl. Inst.
Xia Chen, Qianqian Sun, Hao Yu, Fei Hao
2023 J jnl
Expert Syst. Appl.
Jiaming Fan, Xia Chen, Xiao Liang
2023 J jnl
CoRR
Xia Chen, Ruiji Sun, Ueli Saluz, Stefano Schiavon, Philipp Geyer
2023 J jnl
CoRR
Xia Chen, Manav Mahan Singh, Philipp Geyer
2022 J jnl
IEEE Trans. Veh. Technol.
Ronghui Zhang, Kening Li, Yueying Wu, Dezong Zhao, Zhihan Lv, Fuliang Li, Xia Chen, Zhijun Tony Qiu, Fan Yu
2022 J jnl
CoRR
Xia Chen, Guanlan Zhang, Michael Yu Wang, Hongyu Yu
2022 J jnl
Pattern Recognit.
Yuanhong Zhong, Xia Chen, Jinyang Jiang, Fan Ren
2022 J jnl
CoRR
Xia Chen, Tong Guo, Martin Kriegel, Philipp Geyer
2022 J jnl
Adv. Eng. Informatics
Xia Chen, Tong Guo, Martin Kriegel, Philipp Geyer
2022 conf
BDSIC
Zhenhong Liu, Xiaoguang Yu, Xiaodong Xie, Xia Chen
2022 J jnl
Nat. Comput. Sci.
Xueou Liu, Yigeng Cao, Ye Guo, Xiaowen Gong, Yahui Feng, Yao Wang, Mingyang Wang, Mengxuan Cui, Wenwen Guo, Luyang Zhang, Ningning Zhao, Xiaoqiang Song, Xuetong Zheng, Xia Chen, Qiujin Shen, Song Zhang, Zhen Song, Linfeng Li, Sizhou Feng, Mingzhe Han, Xiaofan Zhu, Erlie Jiang, Junren Chen
2022 J jnl
IEEE Trans. Circuits Syst. Video Technol.
Yuanhong Zhong, Xia Chen, Yongting Hu, Panliang Tang, Fan Ren
2022 J jnl
Nat. Comput. Sci.
Xueou Liu, Yigeng Cao, Ye Guo, Xiaowen Gong, Yahui Feng, Yao Wang, Mingyang Wang, Mengxuan Cui, Wenwen Guo, Luyang Zhang, Ningning Zhao, Xiaoqiang Song, Xuetong Zheng, Xia Chen, Qiujin Shen, Song Zhang, Zhen Song, Linfeng Li, Sizhou Feng, Mingzhe Han, Xiaofan Zhu, Erlie Jiang, Junren Chen
2022 conf
ICCSIE
Lan Zhu, Huang Lin, Xia Chen, Wei Liang, Zhen Cheng, Dongheng Shao, Hui Yu, Yunhong Zheng, Weicheng Ma
2022 J jnl
CoRR
Xia Chen, Jimmy Abualdenien, Manav Mahan Singh, André Borrmann, Philipp Geyer
2022 J jnl
IEEE Trans. Cybern.
Xia Chen, Hao Yu, Fei Hao
2022 J jnl
Sci. China Inf. Sci.
Yuanhong Zhong, Xia Chen, Jinyang Jiang, Fan Ren
2022 J jnl
J. Intell. Fuzzy Syst.
Guoteng Xu, Tingjie Lu, Xia Chen, Yiman Liu
2022 J jnl
CoRR
Xia Chen, Xiangbin Teng, Han Chen, Yafeng Pan, Philipp Geyer
2022 J jnl
Eng. Appl. Artif. Intell.
Jiaming Fan, Xia Chen, Yu Wang, Xiangmin Chen
2022 J jnl
RFC
Kamran Raza, Rajiv Asati, Xufeng Liu, Santosh Esale, Xia Chen, Himanshu Shah
2021 conf
ICCAI
Bo Du, Xia Chen, Shengnan Wu, Yu Wang, Jianwei Lin, Liang Yan
2021 B conf
SECON
Aslan B. Wong, Xia Chen, Qianru Liao, Kaishun Wu
2021 J jnl
Comput. Secur.
Haowen Chen, Qiang Qu, Yexiong Lin, Xia Chen, Keqin Li
2021 conf
WCNC Workshops
Bing Liu, Jianwei Mao, Ling Xu, Ruizhao Hu, Xia Chen
2021 B conf
SMC
Xia Chen, Yuxiao Huang, Wei Zhou, Liang Feng
2021 J jnl
CoRR
Philipp Geyer, Manav Mahan Singh, Xia Chen
2021 J jnl
Appl. Math. Lett.
Baoquan Yuan, Xia Chen
2021 Misc conf
SenSys
Aslan B. Wong, Dongliang Tu, Ziqi Huang, Xia Chen, Lu Wang, Kaishun Wu
2021 J jnl
J. Syst. Sci. Complex.
Xiong Kuang, Qian Wang, Xia Chen
2021 conf
UbiComp/ISWC Adjunct
Aslan B. Wong, Xia Chen, Hao Ren, Usman Saleh Toro, Kaishun Wu
2020 J jnl
Sensors
Niraj Verma, Yunwen Tao, Wenli Zou, Xia Chen, Xin Chen, Marek Freindorf, Elfi Kraka
2020 J jnl
J. Intell. Robotic Syst.
Xia Chen, Miaoyan Zhao, Liyuan Yin
2020 J jnl
IEEE Trans. Autom. Control.
Hao Yu, Xia Chen, Tongwen Chen, Fei Hao
2020 conf
3DV
Xia Chen, Jianren Wang, David Held, Martial Hebert
2020 J jnl
CoRR
Xia Chen, Jianren Wang, David Held, Martial Hebert
2020 J jnl
CoRR
Xia Chen, Jianren Wang, Martial Hebert
2020 J jnl
IEEE Access
Jianpeng Zang, Xia Chen
2020 J jnl
Autom. Control. Comput. Sci.
Xia Chen, Wanqin Yang
2019 C conf
CoDIT
Kan Sun, Yijun Wen, Xia Chen, Ye Tao
2019 conf
I2MTC
Xia Chen, Tuan Guo, Xiujuan Zhao, Mingxian Liu
2019 J jnl
Syst. Control. Lett.
Hao Yu, Fei Hao, Xia Chen
2019 J jnl
CoRR
Jianren Wang, Yihui He, Xiaobo Wang, Xinjia Yu, Xia Chen
2018 conf
NCTCS
Xia Chen, Xin Chen, Qizhi Fang
2018 J jnl
Wirel. Pers. Commun.
Xuchen Lin, Ting-Jie Lu, Xia Chen
2018 J jnl
Concurr. Comput. Pract. Exp.
Lin Yang, Xuchen Lin, Ting-Jie Lu, Xia Chen
2017 conf
ICNC-FSKD
Tao Wu, Xia Chen, Limin Zhang
2017 J jnl
IEEE Trans. Veh. Technol.
Chao Chen, Xia Chen, Leye Wang, Xiaojuan Ma, Zhu Wang, Kai Liu, Bin Guo, Zhen Zhou
2017 J jnl
Commun. Stat. Simul. Comput.
Xiaohua Cui, Xia Chen, Li Yan
2017 J jnl
Frontiers Comput. Sci.
Chao Chen, Xia Chen, Zhu Wang, Yasha Wang, Daqing Zhang
2016 conf
VTC Spring
Yan Lei, Gang Zhu, Chao Shen, Xia Chen, Jingjing Xu, Yanqing Xu, Xiaozhou Zhang
2016 J jnl
Clust. Comput.
Xiao Liang, Guanglei Meng, Haitao Luo, Xia Chen
2016 B conf
IWCMC
Xia Chen, Minming Ni
2015 Misc conf
DCAI
Zhu Wang, Chenxi Luo, Tiejian Luo, Xia Chen, Jinzhong Hou
2015 J jnl
IMA J. Math. Control. Inf.
Xia Chen, Fei Hao, Mingyuan Shao
2015 J jnl
Displays
Xia Chen, Tao He, Hongwei Jiang, Biming Wei, Guofei Chen, Xingzhong Fang, Mingliang Jin, Robert A. Hayes, Guofu Zhou, Lingling Shui
2014 J jnl
Int. J. Control
Xia Chen, Fei Hao, Ahmed Rahmani
2014 J jnl
J. Multivar. Anal.
Li Yan, Xia Chen
2014 conf
SFCS@ASIACCS
Chenxi Luo, Zhu Wang, Xia Chen, Tiejian Luo
2013 conf
EMBC
Xia Chen, Susan Thibeault
2013 J jnl
IMA J. Math. Control. Inf.
Xia Chen, Fei Hao
2012 C conf
FUSION
Xia Chen, Weidong Hu, Hongwen Yang, Min Tang
2012 J jnl
Int. J. Gen. Syst.
Weiwei Sun, Fei Hao, Xia Chen
2012 J jnl
Inf. Sci.
Min Tang, Xia Chen, Weidong Hu, Wenxian Yu
2011 conf
IUKM
Min Tang, Xia Chen, Weidong Hu, Wenxian Yu
2011 conf
CHINACOM
Yukai Gao, Gang Zhu, Xia Chen, Di Wu, Buri Ban
2011 conf
ISCID (2)
Xia Chen, Dong Liu, Ting Tang
2011 conf
RAM
Xia Chen, Ting Tang, Lin Li
2010 J jnl
BMC Bioinform.
Yaqiang Wang, Zhonghua Yu, Yongguang Jiang, Kaikuo Xu, Xia Chen
2010 J jnl
Int. J. Model. Identif. Control.
Qingming Chang, Xia Chen, Changjun Chen, J. Iwan D. Alexander
2010 J jnl
Int. J. Model. Identif. Control.
Xia Chen, Qingming Chang, Jiao Wang, Changjun Chen
2009 J jnl
IEEE Trans. Wirel. Commun.
Li Li, Honglin Hu, Xia Chen, Hsiao-Hwa Chen
2009 J jnl
Stat. Anal. Data Min.
Ting Chen, Chong Zhang, Xia Chen, Liqing Li
2009 conf
ESIAT (1)
Shiliang Su, Xia Chen, Jiaping Wu, Xiaoya Ma
2009 conf
ESIAT (1)
Yuan Zhang, Xia Chen, Shiliang Su, Jiaping Wu, Jiaguo Qi
2009 conf
WGEC
Xia Chen, Chen Wang
2009 J jnl
Int. J. Model. Identif. Control.
Xia Chen, Qingming Chang, Jiao Wang, Changjun Chen
2009 conf
ICNC (6)
Yan Chen, Zhi-Ping Fan, Xia Chen, Jing Liu
2008 conf
FSKD (1)
Xia Chen, Baozhen Wei, Yingze Wu
2008 conf
FSKD (1)
Xia Chen, Li-Hong Ma
2008 J jnl
EURASIP J. Wirel. Commun. Netw.
Xia Chen, Honglin Hu, Shengyao Jin, Hsiao-Hwa Chen
2008 conf
ICNC (7)
Xia Chen, Xianyi Zeng, Ludovic Koehl
2008 J jnl
IEEE Trans. Wirel. Commun.
Xia Chen, Honglin Hu, Haifeng Wang, Hsiao-Hwa Chen, Mohsen Guizani
2007 B conf
PIMRC
Xia Chen, Haifeng Wang, Honglin Hu
2007 conf
FSKD (1)
Xia Chen, Zhi-Ping Fan, Li-Hong Ma
2007 conf
FSKD (1)
Xia Chen, Zhi-Ping Fan
2007 conf
FSKD (1)
Yan-e Mao, Xia Chen, Zhen Luo, Yuanwei Jing, Siying Zhang
2007 conf
FSKD (1)
Xiang-qin Liu, Xia Chen, Baozhen Wei
2006 A* conf
ASPLOS
Katherine E. Coons, Xia Chen, Doug Burger, Kathryn S. McKinley, Sundeep K. Kushwaha
2006 B conf
ISPASS
Ramadass Nagarajan, Xia Chen, Robert G. McDonald, Doug Burger, Stephen W. Keckler
2005 conf
FSKD (1)
Zhi-Ping Fan, Xia Chen
2002 J jnl
J. Comput. Sci. Technol.
Tom Head, Xia Chen, Masayuki Yamamura, Susannah Gal
2001 B conf
DNA
Tom Head, Xia Chen, Matthew J. Nichols, Masayuki Yamamura, Susannah Gal
redb/extractors/decompiler/bninja/analysis/disassembly.py
← Index redb/extractors/decompiler/bninja/analysis/disassembly.py python
import re
import time

import binaryninja
from binaryninja.enums import (
    InstructionTextTokenType,
)

# Support both package and standalone imports
try:
    from ..function_type import FunctionTypeAnalysis
    from ..utils.hashes import calculate_sha256
except ImportError:
    # Fallback to absolute imports (for multiprocessing spawned processes)
    from redb.extractors.decompiler.bninja.function_type import FunctionTypeAnalysis
    from redb.extractors.decompiler.bninja.utils.hashes import calculate_sha256


class DisassemblyAnalysis:
    INVALID_STACK_SIZE = -1

    def __init__(self, arch, function, bv, logger):
        self.arch = arch
        self.function = function
        self.bv = bv
        self.logger = logger
        if self.function is not None and hasattr(self.function, "instructions"):
            self.instructions = self.function.instructions
        else:
            self.instructions = []
        self.errors = []
        return

    def log_error(
        self, message, function_name, address, exception=None, error_location="unknown"
    ):
        """Log an error during processing."""
        error_msg = f"Error in function {function_name} at {address}: {message}"
        if exception:
            error_msg += f" - {str(exception)}"
        self.logger.error(error_msg)

        # Add to errors list
        error = {
            "function_name": function_name,
            "function_address": str(address),
            "error_location": error_location,
            "error_message": message,
            "error_details": str(exception) if exception else "",
            "error_type": type(exception).__name__ if exception else "Unknown",
            "timestamp": int(time.time() * 1000),
        }
        self.errors.append(error)

    def get_json(self):
        try:
            # Build disassembly string and normalized versions
            disassembly_builder = [[], []]  # Address and instruction text

            # Create a dictionary mapping addresses to instruction tokens
            instr_tokens_by_addr = {}
            for instr_tokens, addr in self.instructions:
                instr_tokens_by_addr[addr] = instr_tokens

            addresses = sorted(instr_tokens_by_addr.keys())
            for address in addresses:
                # Original disassembly with addresses
                # instr_tokens, address = instruction
                instr_tokens = instr_tokens_by_addr[address]
                disassembly_builder[0].append(address)
                disassembly_builder[1].append("".join(map(str, instr_tokens)))

            # Join with newlines
            disassembly_str = "\n".join(disassembly_builder[1])
            disassembly_with_addresses = "\n".join(
                f"{hex(address)}: {instr_text}"
                for address, instr_text in zip(
                    disassembly_builder[0], disassembly_builder[1], strict=False
                )
            )

            disassembly_json = {
                "disassembled_function_hash": calculate_sha256(disassembly_str),
                "disassembled_function": disassembly_with_addresses,
                "disassembled_function_no_addresses": disassembly_str,
                "disassembled_function_name": self.function.name,
                "disassembled_function_address": self.function.start,
                "instructions_count": len(instr_tokens_by_addr.keys()),
                "function_type": FunctionTypeAnalysis(self.function)
                .get_function_type()
                .name,
            }

            # Add additional metrics
            type_frequencies = self.collect_instruction_types()
            disassembly_json["instructions_types"] = list(type_frequencies.keys())
            disassembly_json["control_flow_count"] = (
                self.count_control_flow_instructions()
            )
            disassembly_json["memory_access_pattern"] = self.collect_memory_patterns()
            disassembly_json["register_usage"] = self.collect_register_usage()
            disassembly_json["data_references_count"] = self.count_data_references()
            disassembly_json["max_block_size"] = self.compute_max_block_size()
            disassembly_json["num_calls"] = self.compute_num_calls()
            disassembly_json["stack_size"] = self.estimate_stack_size()

            return disassembly_json, self.errors

        except Exception as e:
            self.log_error(
                "Failed to collect instruction types",
                self.function.name,
                self.function.start,
                e,
                "collect_instruction_types",
            )
            raise ValueError(e) from e

    def collect_instruction_types(self):
        """Collect instruction type frequencies from a function."""
        type_frequencies = {}

        try:
            # Iterate through all instructions in the function
            for instruction in self.instructions:
                instr_tokens = instruction[0]  # Get the instruction tokens

                # Extract the mnemonic from the instruction tokens
                mnemonic = None
                for token in instr_tokens:
                    if token.type == InstructionTextTokenType.InstructionToken:
                        mnemonic = token.text
                        break

                if not mnemonic:
                    continue

                # Use normalize_opcode to get standardized opcode
                normalized = self.normalize_opcode(mnemonic)

                # Get category from opcode_categories or use the instruction type directly
                category = self.arch.opcode_categories.get(normalized)
                if category:
                    self._increment_frequency(type_frequencies, category)

        except Exception as e:
            self.log_error(
                "Failed to collect instruction types",
                self.function.name,
                self.function.start,
                e,
                "collect_instruction_types",
            )

        return type_frequencies

    def normalize_opcode(self, opcode):
        return opcode.upper()

    def collect_memory_patterns(self):
        """Collect memory access patterns from a function."""
        patterns = []
        try:
            for instruction in self.instructions:
                instr_tokens = instruction[0]

                # We need to capture memory operands between BeginMemoryOperandToken and EndMemoryOperandToken
                in_memory_operand = False
                memory_operand_text = ""

                for token in instr_tokens:
                    if token.type == InstructionTextTokenType.BeginMemoryOperandToken:
                        in_memory_operand = True
                        memory_operand_text = ""
                    elif token.type == InstructionTextTokenType.EndMemoryOperandToken:
                        in_memory_operand = False

                        # Process the captured memory operand text
                        if memory_operand_text:
                            # Categorize memory access pattern
                            if (
                                "+" in memory_operand_text
                                and "*" in memory_operand_text
                            ):
                                if "MEM_SCALED_INDEX" not in patterns:
                                    patterns.append("MEM_SCALED_INDEX")
                            elif (
                                "+" in memory_operand_text or "-" in memory_operand_text
                            ):
                                if "MEM_BASE_OFFSET" not in patterns:
                                    patterns.append("MEM_BASE_OFFSET")
                            else:
                                if "MEM_DIRECT" not in patterns:
                                    patterns.append("MEM_DIRECT")

                            # Check for stack accesses
                            if any(
                                reg in memory_operand_text
                                for reg in ["SP", "BP", "ESP", "EBP", "RSP", "RBP"]
                            ):
                                if "MEM_STACK" not in patterns:
                                    patterns.append("MEM_STACK")
                            # Check for string operations
                            elif (
                                any(
                                    reg in memory_operand_text
                                    for reg in ["SI", "DI", "ESI", "EDI", "RSI", "RDI"]
                                )
                                and "MEM_STRING" not in patterns
                            ):
                                patterns.append("MEM_STRING")
                    elif in_memory_operand:
                        # Accumulate token text while inside a memory operand
                        memory_operand_text += token.text
        except Exception as e:
            self.log_error(
                "Failed to collect memory patterns",
                self.function.name,
                self.function.start,
                e,
                "collect_memory_patterns",
            )
        return patterns

    def collect_register_usage(self):
        """Collect register usage from a function."""
        registers = []
        try:
            # Define register groups we're interested in tracking
            register_groups = {
                "GPR": [
                    "RAX",
                    "RBX",
                    "RCX",
                    "RDX",
                    "R9",
                    "R10",
                    "R11",
                    "R12",
                    "R13",
                    "R14",
                    "R15",
                    "EAX",
                    "EBX",
                    "ECX",
                    "EDX",
                    "R9D",
                    "R10D",
                    "R11D",
                    "R12D",
                    "R13D",
                    "R14D",
                    "AX",
                    "BX",
                    "CX",
                    "DX",
                ],
                "GPR_INDEX": ["RSI", "RDI", "ESI", "EDI", "SI", "DI"],
                "GPR_STACK": ["RSP", "RBP", "ESP", "EBP", "SP", "BP"],
                "SIMD": ["XMM", "YMM", "ZMM"],
                "FPU": ["ST", "ST0", "ST1", "ST2", "ST3", "ST4", "ST5", "ST6", "ST7"],
                "FLAGS": ["FLAGS", "EFLAGS", "RFLAGS"],
                "CONTROL_REGISTER": ["CR0", "CR2", "CR3", "CR4", "CR8"],
                "DEBUG_REGISTER": ["DR0", "DR1", "DR2", "DR3", "DR6", "DR7"],
            }

            # Extract registers from instructions
            for instruction in self.instructions:
                instr_tokens = instruction[0]
                for token in instr_tokens:
                    if token.type == InstructionTextTokenType.RegisterToken:
                        reg = token.text.upper()
                        # Check which group this register belongs to
                        for group, regs in register_groups.items():
                            # if any(r in reg for r in regs) or any(reg.startswith(r) for r in regs):
                            if any(reg == r or reg.startswith(r) for r in regs):
                                if group not in registers:
                                    registers.append(group)
                                break
        except Exception as e:
            self.log_error(
                "Failed to collect register usage",
                self.function.name,
                self.function.start,
                e,
                "collect_register_usage",
            )
        return registers

    def count_data_references(self):
        """Count the number of data references in a function."""
        count = 0
        try:

            if self.function.mlil is None:
                return 0

            for block in self.function.mlil:
                for instr in block:
                    instr_str = str(instr)
                    logged = False
                    src = None

                    # Check for constant dereferencing or symbolic refs
                    if hasattr(instr, "src"):
                        src = instr.src
                        if isinstance(
                            src,
                            (
                                binaryninja.mediumlevelil.MediumLevelILConstPtr,
                                binaryninja.mediumlevelil.MediumLevelILConst,
                            ),
                        ):
                            count += 1
                            logged = True

                    # Check full string for hardcoded addresses or symbol-like tokens
                    if re.search(r"\b0x[0-9A-Fa-f]{3,}\b", instr_str) and not logged:
                        count += 1
                        logged = True

                    if "_" in instr_str and not logged:
                        count += 1
                        logged = True

                    # Only check for MediumLevelILConstPtr if src exists
                    if src is not None and isinstance(
                        src, binaryninja.mediumlevelil.MediumLevelILConstPtr
                    ):
                        addr = src.constant
                        # Check if address is in data sections
                        segment = self.bv.get_segment_at(addr)
                        if segment and segment.writable:
                            # print(f"[{function.name}] Matched data section reference in: {instr_str}")
                            count += 1
                            logged = True
        except Exception as e:
            self.logger.warning(
                f"Failed to use MLIL for counting data references in {self.function.name} at {self.function.start}: {e}"
            )
        return count

    def compute_max_block_size(self):
        """Compute the maximum basic block size in a function."""
        max_size = 0
        if self.function is None:
            return 0

        for block in self.function.basic_blocks:
            try:
                # Count instructions in this block using the direct length approach
                # This avoids UTF-8 decoding issues entirely
                block_size = block.instruction_count
                max_size = max(max_size, block_size)
            except Exception as e:
                self.log_error(
                    f"[HandledError] computing max block size: {e}",
                    self.function.name,
                    self.function.start,
                    e,
                    "compute_max_block_size",
                )
        return max_size

    def count_control_flow_instructions(self):
        """Count the number of control flow instructions in a function."""
        count = 0
        try:
            for instruction in self.instructions:
                instr_tokens = instruction[0]
                if self.arch.is_control_flow_instruction(instr_tokens):
                    count += 1
        except Exception as e:
            self.log_error(
                "Failed to count control flow instructions",
                self.function.name,
                self.function.start,
                e,
                "count_control_flow_instructions",
            )
        return count

    def compute_num_calls(self) -> int:
        """Compute the number of call instructions in a function."""
        num_calls = 0
        try:
            for instruction in self.instructions:
                instr_tokens = instruction[0]
                # Extract the mnemonic
                for token in instr_tokens:
                    if token.type == InstructionTextTokenType.InstructionToken:
                        if token.text.upper() == "CALL":
                            num_calls += 1
                        break
        except Exception as e:
            self.log_error(
                "Failed to compute number of calls",
                self.function.name,
                self.function.start,
                e,
                "compute_num_calls",
            )
        return num_calls

    def _increment_frequency(self, frequencies, type_name):
        """Increment the frequency count for an instruction type."""
        if type_name in frequencies:
            frequencies[type_name] += 1
        else:
            frequencies[type_name] = 1

    def estimate_stack_size(self):
        """Estimate the stack size used by a function."""
        try:
            # Binary Ninja provides a stack adjustment value for functions
            # Need to convert OffsetWithConfidence to a plain integer
            stack_adjust = self.function.stack_adjustment
            if hasattr(stack_adjust, "value"):  # Handle OffsetWithConfidence objects
                return stack_adjust.value
            return stack_adjust
        except Exception as e:
            self.log_error(
                "Failed to estimate stack size",
                self.function.name,
                self.function.start,
                e,
                "estimate_stack_size",
            )
            return self.INVALID_STACK_SIZE