Wei-Yu Chen

123 papers A* 7A 9B 8C 6Misc 3Journal 49Unranked 41
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Trans. Artif. Intell.
Hung Guei, Yan-Ru Ju, Wei-Yu Chen, Ti-Rong Wu
2026 J jnl
CoRR
Yun-Jui Tsai, Wei-Yu Chen, Yan-Ru Ju, Yu-Hung Chang, Ti-Rong Wu
2025 J jnl
Eng. Appl. Artif. Intell.
Shu-Kai S. Fan, Wei-Yu Chen
2025 J jnl
Data Intell.
Chung-I Huang, Chen-Kai Sun, Jih-Sheng Chang, Wei-Yu Chen, Ching-Min Huang, Yu-Lung Wu, Hong-Chin Hsiao, Jyh-Horng Wu, Wen-Yi Chang
2025 J jnl
Adv. Artif. Intell. Mach. Learn.
Wei-Yu Chen, Tsang-Long Pao, Yucheng Kao
2024 A* conf
CVPR
Wei-Yu Chen, Aswin C. Sankaranarayanan, Anat Levin, Matthew O'Toole
2024 J jnl
IEEE Trans. Mob. Comput.
Jing-Wen Ke, Ren-Hung Hwang, Chih-Yu Wang, Jian-Jhih Kuo, Wei-Yu Chen
2024 A conf
INTERSPEECH
Shiu-Hsiang Liou, Po-Cheng Chan, Chia-Ping Chen, Tzu-Chieh Lin, Chung-Li Lu, Yu-Han Cheng, Hsiang-Feng Chuang, Wei-Yu Chen
2024 C conf
VCIP
Wei-Yu Chen, Peggy Joy Lu, Vincent Shin-Mu Tseng
2024 J jnl
IEEE Trans. Mob. Comput.
Wei-Yu Chen, Chih-Yu Wang, Ren-Hung Hwang, Wen-Tsuen Chen, Sin-Yu Huang
2024 conf
APSIPA
Po Cheng Chan, Wei-Yu Chen, Chung-Li Lu, Hsiang-Feng Chuang, Yu-Han Cheng, Jia-Ching Wang
2024 J jnl
CoRR
Wei-Yu Chen
2024 J jnl
CoRR
Hung Guei, Yan-Ru Ju, Wei-Yu Chen, Ti-Rong Wu
2024 J jnl
IEEE Trans. Mob. Comput.
Chih-Hang Wang, Yishuo Shi, De-Nian Yang, Wei-Yu Chen, Wen-Tsuen Chen
2024 conf
VTC Spring
Masaaki Ito, Issei Kanno, Yoji Kishi, Wei-Yu Chen, Andreas F. Molisch
2024 conf
IEEE SENSORS
Kuan-Hua Chen, Hsin-Yu Chuang, Wei-Yu Chen, Yu-Bin Chen, Cheng-Yang Liu
2024 J jnl
IEEE Access
Chiao-Yi Wang, Guru Nandhan Appiya Dilipkumar Peethambari, Yi-Ting Shen, Wei-Yu Chen, Sandip Sharan Senthil Kumar, Alexander Long, Alan Williams, Gudjon Magnusson, Allen Pattillo, Don Webster, Matthew Gray, Miao Yu, Yang Tao
2023 conf
APSIPA ASC
Chung-I Huang, Jih-Sheng Chang, Chen-Kai Sun, Taichi Wang, Wei-Yu Chen, Hui Hung Yu, Wen-Yi Chang, Fang-Pang Lin
2023 conf
APSIPA ASC
Ting-Wei Chen, Chia-Ping Chen, Chung-Li Lu, Bo-Cheng Chan, Yu-Han Cheng, Hsiang-Feng Chuang, Wei-Yu Chen
2023 conf
VTC2023-Spring
Issei Kanno, Masaaki Ito, Yoshiaki Amano, Yoji Kishi, Thomas Choi, Wei-Yu Chen, Andreas F. Molisch
2023 J jnl
IEEE Trans. Mob. Comput.
Wei-Yu Chen, Po-Yu Chou, Chih-Yu Wang, Ren-Hung Hwang, Wen-Tsuen Chen
2023 J jnl
CoRR
Chung-I Huang, Wei-Yu Chen, Wei Jan Ko, Jih-Sheng Chang, Chen-Kai Sun, Hui Hung Yu, Fang-Pang Lin
2023 J jnl
IEEE Trans. Veh. Technol.
Kuan-Lin Chen, Wei-Yu Chen, Ren-Hung Hwang
2023 A* conf
CVPR
Jen-Hao Rick Chang, Wei-Yu Chen, Anurag Ranjan, Kwang Moo Yi, Oncel Tuzel
2023 J jnl
CoRR
Jen-Hao Rick Chang, Wei-Yu Chen, Anurag Ranjan, Kwang Moo Yi, Oncel Tuzel
2023 conf
APSIPA ASC
Chia-Chuan Liu, Chia-Ping Chen, Chung-Li Lu, Bo-Cheng Chan, Yu-Han Cheng, Hsiang-Feng Chuang, Wei-Yu Chen
2023 J jnl
Biomed. Signal Process. Control.
Chih-Wei Sung, Wei-Tien Chang, Wei-Yu Chen, Fu-Shan Jaw, Jiann-Shing Shieh
2023 conf
SIGGRAPH Emerging Technologies
Yingsi Qin, Wei-Yu Chen, Matthew O'Toole, Aswin C. Sankaranarayanan
2023 J jnl
ACM Trans. Graph.
Yingsi Qin, Wei-Yu Chen, Matthew O'Toole, Aswin C. Sankaranarayanan
2023 B conf
GLOBECOM
Wei-Yu Chen, Masaaki Ito, Issei Kanno, Thomas Choi, Andreas F. Molisch
2022 B conf
GLOBECOM
Thomas Choi, Issei Kanno, Masaaki Ito, Wei-Yu Chen, Andreas F. Molisch
2022 J jnl
Sensors
Tian-Fu Lee, Xiucai Ye, Wei-Yu Chen, Chi-Chang Chang
2022 conf
VTC Spring
Issei Kanno, Masaaki Ito, Takeo Ohseki, Kosuke Yamazaki, Yoji Kishi, Thomas Choi, Wei-Yu Chen, Andreas F. Molisch
2022 J jnl
IEEE Open J. Commun. Soc.
Masaaki Ito, Issei Kanno, Kosuke Yamazaki, Yoji Kishi, Wei-Yu Chen, Thomas Choi, Andreas F. Molisch
2022 conf
ROCLING
Ting-Wei Chen, Wei-Ting Lin, Chia-Ping Chen, Chung-Li Lu, Bo-Cheng Chan, Yu-Han Cheng, Hsiang-Feng Chuang, Wei-Yu Chen
2022 conf
VTC Fall
Masaaki Ito, Issei Kanno, Yoshiaki Amano, Yoji Kishi, Wei-Yu Chen, Thomas Choi, Andreas F. Molisch
2022 conf
ROCLING
Chia-Chuan Liu, Sung-Jen Huang, Chia-Ping Chen, Chung-Li Lu, Bo-Cheng Chan, Yu-Han Cheng, Hsiang-Feng Chuang, Wei-Yu Chen
2022 B conf
ICPR
Wen-Hung Liao, Wei-Yu Chen, Yi-Chieh Wu
2022 J jnl
CoRR
Kuan-Lin Chen, Wei-Yu Chen, Ren-Hung Hwang
2022 J jnl
IEEE Trans. Wirel. Commun.
Po-Yu Chou, Wei-Yu Chen, Chih-Yu Wang, Ren-Hung Hwang, Wen-Tsuen Chen
2021 J jnl
CoRR
Guei-Yuan Lueh, Kaiyu Chen, Gang Chen, Joel Fuentes, Wei-Yu Chen, Fangwen Fu, Hong Jiang, Hongzheng Li, Daniel Rhee
2021 A conf
CGO
Guei-Yuan Lueh, Kaiyu Chen, Gang Chen, Joel Fuentes, Wei-Yu Chen, Fangwen Fu, Hong Jiang, Hongzheng Li, Daniel Rhee
2021 J jnl
J. Inf. Secur. Appl.
Tian-Fu Lee, Wei-Yu Chen
2021 C conf
APNOMS
Chia-Wei Wu, Chia-Wei Tseng, Wei-Yu Chen, Li-Fan Wu, Shih-Chun Hsu, Sheng-Wang Yu
2021 B conf
ICCP
Wei-Yu Chen, Anat Levin, Matthew O'Toole, Aswin C. Sankaranarayanan
2021 J jnl
IEEE Access
Bor-Sen Chen, Min-Yen Lee, Wei-Yu Chen, Weihai Zhang
2021 conf
ICCE-TW
Hsing-Tung Ho, Wei-Yu Chen
2021 conf
ICMECG
Hsiao-Ting Tseng, Yu-Cheng Kao, Hsian-An Hu, Wei-Yu Chen
2021 conf
ICCE-TW
Wei-Yu Chen, Chih-Wen Cheng
2020 conf
ICC
Po-Yu Chou, Wei-Yu Chen, Chih-Yu Wang, Ren-Hung Hwang, Wen-Tsuen Chen
2020 Misc conf
ICNC
Wei-Yu Chen, Po-Yu Chou, Chih-Yu Wang, Ren-Hung Hwang, Wen-Tsuen Chen
2020 J jnl
IEEE Trans. Green Commun. Netw.
Wei-Yu Chen, Po-Ya Hsieh, Bor-Sen Chen
2020 J jnl
IEEE Trans. Veh. Technol.
Wei-Yu Chen, Bor-Sen Chen, Wen-Tsuen Chen
2020 J jnl
IEEE Trans. Veh. Technol.
Ren-Hung Hwang, Chih-Yu Wang, Jenq-Neng Hwang, Yu-Ren Lin, Wei-Yu Chen
2020 conf
ICCE-TW
Wei-Yu Chen, Chu-Ching Huang, Tzu-Min Lo, Wei-Chun Yuan, Hsin-Yu Tsai, Ting-Fang Cheng, Fang-Ling Chang
2019 conf
ICLR (Poster)
Wei-Yu Chen, Yen-Cheng Liu, Zsolt Kira, Yu-Chiang Frank Wang, Jia-Bin Huang
2019 J jnl
CoRR
Wei-Yu Chen, Yen-Cheng Liu, Zsolt Kira, Yu-Chiang Frank Wang, Jia-Bin Huang
2019 conf
IPDPS Workshops
Joel Fuentes, Wei-Yu Chen, Guei-Yuan Lueh, Isaac D. Scherson
2019 A conf
CGO
Anupama Chandrasekhar, Gang Chen, Po-Yu Chen, Wei-Yu Chen, Junjie Gu, Peng Guo, Shruthi Hebbur Prasanna Kumar, Guei-Yuan Lueh, Pankaj Mistry, Wei Pan, Thomas Raoux, Konrad Trifunovic
2019 conf
ICBDC
Wei-Yu Chen, Peggy Joy Lu, Steven Shiau
2019 conf
ICCE-TW
Wei-Yu Chen, Jau-Kai Hu
2019 conf
PPAM (1)
Joel Fuentes, Wei-Yu Chen, Guei-Yuan Lueh, Arturo Garza, Isaac D. Scherson
2019 J jnl
IEEE Trans. Image Process.
Wei-Yu Chen, Tzu-Ming Harry Hsu, Yao-Hung Hubert Tsai, Ming-Syan Chen, Yu-Chiang Frank Wang
2018 conf
ICTC
Li-Der Chou, Chia-Wei Tseng, Meng-Sheng Lai, Wei-Yu Chen, Kuo-Chung Chen, Chia-Kuan Yen, Tsung-Fu Ou, Wei-Hsiang Tsai, Yi-Hsuan Chiu
2018 J jnl
IEEE Trans. Cybern.
Bor-Sen Chen, Wei-Yu Chen, Chun-Tao Young, Zhiguo Yan
2018 A conf
CGO
Wei-Yu Chen, Guei-Yuan Lueh, Pratik Ashar, Kaiyu Chen, Buqi Cheng
2018 B conf
GLOBECOM
Wei-Yu Chen, Bor-Sen Chen, Wen-Tsuen Chen
2018 J jnl
Interact. Learn. Environ.
Ching-Huei Chen, Victor Law, Wei-Yu Chen
2017 J jnl
IEEE Trans. Wirel. Commun.
Hwa-Chun Lin, Wei-Yu Chen
2017 Misc conf
ICASSP
Wei-Jen Ko, Jheng-Ying Yu, Wei-Yu Chen, Yu-Chiang Frank Wang
2017 conf
IFSA-SCIS
Chun-Fei Hsu, Wei-Heng Kao, Wei-Yu Chen, Kai-Yi Wong
2017 A* conf
ICCV
Yi-Hsin Chen, Wei-Yu Chen, Yu-Ting Chen, Bo-Cheng Tsai, Yu-Chiang Frank Wang, Min Sun
2017 J jnl
CoRR
Yi-Hsin Chen, Wei-Yu Chen, Yu-Ting Chen, Bo-Cheng Tsai, Yu-Chiang Frank Wang, Min Sun
2017 J jnl
Int. J. Comput. Linguistics Chin. Lang. Process.
Wei-Yu Chen, Siaw-Fong Chung
2016 A* conf
AAAI
Yao-Hung Hubert Tsai, Cheng-An Hou, Wei-Yu Chen, Yi-Ren Yeh, Yu-Chiang Frank Wang
2016 conf
ECCV (5)
Wei-Yu Chen, Tzu-Ming Harry Hsu, Yao-Hung Hubert Tsai, Yu-Chiang Frank Wang, Ming-Syan Chen
2015 B conf
ICIP
Wei-Yu Chen, Tzu-Ming Harry Hsu, Cheng-An Hou, Yi-Ren Yeh, Yu-Chiang Frank Wang
2015 J jnl
J. Educ. Technol. Soc.
Kun Huang, Ching-Huei Chen, Wen-Shiuan Wu, Wei-Yu Chen
2015 A* conf
ICCV
Tzu-Ming Harry Hsu, Wei-Yu Chen, Cheng-An Hou, Yao-Hung Hubert Tsai, Yi-Ren Yeh, Yu-Chiang Frank Wang
2014 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Shao-Yun Fang, Yao-Wen Chang, Wei-Yu Chen
2014 J jnl
IEEE Trans. Ind. Electron.
Hung-Chi Chen, Keng-Yuan Chen, Wei-Yu Chen
2013 conf
APSIPA
Po-Chyi Su, Wei-Yu Chen, Shao-Yu Shiau, Ching-Yu Wu, Addison Y. S. Su
2013 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Shao-Yun Fang, Wei-Yu Chen, Yao-Wen Chang
2013 J jnl
EURASIP J. Image Video Process.
Po-Chyi Su, Chi-Heng Lan, Chin-Song Wu, Zi-Xin Zeng, Wei-Yu Chen
2012 A* conf
DAC
Shao-Yun Fang, Yao-Wen Chang, Wei-Yu Chen
2012 J jnl
VLSI Design
Sheng-Chieh Huang, Hui-Min Wang, Wei-Yu Chen
2012 conf
ICGEC
You-Shyang Chen, Ching-Hsue Cheng, Da-Ren Chen, Wei-Yu Chen
2012 conf
ISPD
Shao-Yun Fang, Wei-Yu Chen, Yao-Wen Chang
2011 conf
IBICA
Yung-Pin Lee, Sheng-Chieh Huang, Kai-Yu Shao, Shi-Han Luo, Wei-Chun Chiu, Hui-Min Wang, Mark C. Hou, Shih-Chun Chao, Cheng-Lung Tseng, Wei-Ta Hsiao, Chung-Hung Hong, Wei-Yu Chen
2011 conf
IBICA
Kai-Yu Shao, Shi-Han Luo, Wei-Chun Chiu, Sheng-Chieh Huang, Yung-Pin Lee, Hui-Min Wang, Mark C. Hou, Shih-Chun Chao, Cheng-Lung Tseng, Wei-Ta Hsiao, Chung-Hung Hong, Wei-Yu Chen
2011 J jnl
Microelectron. J.
Wei-Yu Chen, Shoou-Jinn Chang, Min-Hang Weng, Cheng-Yuan Hung
2011 conf
CCIS
Shun-Fa Yang, Wei-Yu Chen, Yao-Tsung Wang
2011 conf
IBICA
Wei-Ta Hsiao, Chung-Hung Hong, Hui-Min Wang, Sheng-Chieh Huang, Kai-Yu Shao, Shi-Han Luo, Wei-Chun Chiu, Yung-Pin Lee, Mark C. Hou, Shih-Chun Chao, Cheng-Lung Tseng, Wei-Yu Chen
2011 conf
IBICA
Chung-Hung Hong, Wei-Ta Hsiao, Hui-Min Wang, Sheng-Chieh Huang, Kai-Yu Shao, Shi-Han Luo, Wei-Chun Chiu, Yung-Pin Lee, Mark C. Hou, Shih-Chun Chao, Cheng-Lung Tseng, Wei-Yu Chen
2011 conf
IBICA
Sheng-Chieh Huang, Yung-Pin Lee, Min-Hua Hsieh, Hui-Min Wang, Mark C. Hou, Shih-Chun Chao, Cheng-Lung Tseng, Wei-Ta Hsiao, Chung-Hung Hong, Kai-Yu Shao, Shi-Han Luo, Wei-Chun Chiu, Wei-Yu Chen
2010 conf
DCNET/OPTICS
Yun-Long Lay, Hui-Jen Yang, Chern-Sheng Lin, Wei-Yu Chen
2010 J jnl
Expert Syst. Appl.
Wen-Tsann Lin, Shen-Tsu Wang, Ta-Cheng Chiang, Yu-xin Shi, Wei-Yu Chen, Huei-min Chen
2010 J jnl
J. Medical Syst.
Mei-Ling Huang, Yung-Hsiang Hung, Wei-Yu Chen
2010 A conf
ITC
Mahmut Yilmaz, Baosheng Wang, Jayalakshmi Rajaraman, Tom Olsen, Kanwaldeep Sobti, Dwight Elvey, Jeff Fitzgerald, Grady Giles, Wei-Yu Chen
2009 C conf
ISCAS
Chih-Cheng Hsieh, Wei-Yu Chen, Chung-Yu Wu
2009 Misc conf
CISS
Wei-Yu Chen, Scott L. Miller
2009 B conf
FUZZ-IEEE
Chih-Lyang Hwang, Chiang-Cheng Chiang, Wei-Yu Chen
2009 conf
NCM
Dwen-Ren Tsai, Wei-Yu Chen, Chia-Hao Liang, Chung-Chiang Hu
2009 conf
NCM
Wei-Yu Chen, Dwen-Ren Tsai
2009 C conf
ICIS
Chung-Hsin Liu, Wei-Yu Chen
2007 C conf
ICCD
Ting Wei Chiang, C. Y. Roger Chen, Wei-Yu Chen
2007 C conf
ICCD
Ting Wei Chiang, C. Y. Roger Chen, Wei-Yu Chen
2007 A conf
ICS
Wei-Yu Chen, Dan Bonachea, Costin Iancu, Katherine A. Yelick
2007 A conf
CGO
Cheng Wang, Wei-Yu Chen, Youfeng Wu, Bratin Saha, Ali-Reza Adl-Tabatabai
2007 conf
PASCO
Katherine A. Yelick, Dan Bonachea, Wei-Yu Chen, Phillip Colella, Kaushik Datta, Jason Duell, Susan L. Graham, Paul Hargrove, Paul N. Hilfinger, Parry Husbands, Costin Iancu, Amir Kamil, Rajesh Nishtala, Jimmy Su, Michael L. Welcome, Tong Wen
2007 J jnl
IEEE Trans. Inf. Theory
Lingjia Liu, Parimal Parag, Jia Tang, Wei-Yu Chen, Jean-François Chamberland
2007 B conf
SMC
John Kar-Kin Zao, Yu-Chih Liu, Ming-Hsiao Yang, Sheng-Kun Li, Wei-Yu Chen, Ching-Wei Chen, Kuo-Chin Huang, Jwu-Sheng Hu, Lun-Chia Kuo
2006 A* conf
DAC
Amitava Majumdar, Wei-Yu Chen, Jun Guo
2006 J jnl
Comput. Medical Imaging Graph.
Min-Szu Yao, Shen-Chi Wu, Wei-Yu Chen, Wei-Pin Ho, Wing P. Chan
2006 J jnl
IEICE Trans. Electron.
Sheng-Che Tseng, Chinchun Meng, Wei-Yu Chen
2005 conf
IEEE PACT
Wei-Yu Chen, Costin Iancu, Katherine A. Yelick
2004 A conf
ICS
Christian Bell, Wei-Yu Chen, Dan Bonachea, Katherine A. Yelick
2004 J jnl
IEEE Signal Process. Lett.
Soo-Chang Pei, Wei-Yu Chen
2003 conf
LCPC
Wei-Yu Chen, Arvind Krishnamurthy, Katherine A. Yelick
2002 J jnl
IEEE Trans. Comput. Aided Des. Integr. Circuits Syst.
Wei-Yu Chen, Sandeep K. Gupta, Melvin A. Breuer
2002 J jnl
J. Electron. Test.
Wei-Yu Chen, Sandeep K. Gupta, Melvin A. Breuer
2000 conf
Asian Test Symposium
Wei-Yu Chen, Sandeep K. Gupta, Melvin A. Breuer
1999 A conf
ITC
Wei-Yu Chen, Sandeep K. Gupta, Melvin A. Breuer
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