Carson Kai-Sang Leung

142 papers A* 6A 1B 16C 15Misc 5Journal 33Unranked 52
YearRankTypeTitle / Venue / Authors
2025 J jnl
J. Comput. Biol.
Daryl L. X. Fung, Mohd Wasif Khan, Carson Kai-Sang Leung, Pingzhao Hu
2024 J jnl
ACM Trans. Knowl. Discov. Data
Md. Tanvir Alam, Chowdhury Farhan Ahmed, Md. Samiullah, Carson Kai-Sang Leung
2024 J jnl
Appl. Intell.
Md. Ashraful Islam, Chowdhury Farhan Ahmed, Md. Tanvir Alam, Carson Kai-Sang Leung
2024 J jnl
CoRR
Kashob Kumar Roy, Md Hasibul Haque Moon, Md Mahmudur Rahman, Chowdhury Farhan Ahmed, Carson Kai-Sang Leung
2023 J jnl
Int. J. Multim. Inf. Retr.
Jeong-Hun Kim, Fei Hao, Carson Kai-Sang Leung, Aziz Nasridinov
2023 J jnl
Appl. Intell.
Md. Sahidul Islam, Pankaj Chandra Kar, Mohammad Samiullah, Chowdhury Farhan Ahmed, Carson Kai-Sang Leung
2022 J jnl
Inf. Sci.
Kashob Kumar Roy, Md Hasibul Haque Moon, Md Mahmudur Rahman, Chowdhury Farhan Ahmed, Carson Kai-Sang Leung
2022 J jnl
BMC Bioinform.
Judah Zammit, Daryl L. X. Fung, Qian Liu, Carson Kai-Sang Leung, Pingzhao Hu
2021 J jnl
IEEE Access
Jeong-Hun Kim, Jong-Hyeok Choi, Young-Ho Park, Carson Kai-Sang Leung, Aziz Nasridinov
2019 J jnl
Concurr. Comput. Pract. Exp.
Ladjel Bellatreche, Carson Kai-Sang Leung, Yinglong Xia, Didier El Baz
2019 J jnl
Int. J. Art Cult. Des. Technol.
Carson Kai-Sang Leung, Yibin Zhang
2019 J jnl
Expert Syst. Appl.
Junqiang Liu, Zhongmin Chang, Carson Kai-Sang Leung, Raymond C. W. Wong, Yabo Xu, Rong Zhao
2019 J jnl
Inf. Sci.
Md Mahmudur Rahman, Chowdhury Farhan Ahmed, Carson Kai-Sang Leung
2018 ch.
Encyclopedia of Database Systems (2nd ed.)
Carson Kai-Sang Leung
2018 ch.
Encyclopedia of Database Systems (2nd ed.)
Carson Kai-Sang Leung
2018 J jnl
Future Gener. Comput. Syst.
Anna Kobusinska, Carson Kai-Sang Leung, Ching-Hsien Hsu, Raghavendra S., Victor Chang
2018 ch.
Encyclopedia of Database Systems (2nd ed.)
Carson Kai-Sang Leung
2018 ch.
Encyclopedia of Database Systems (2nd ed.)
Carson Kai-Sang Leung
2018 conf
iThings/GreenCom/CPSCom/SmartData
Chris Soo-Hyun Eom, Wookey Lee, Carson Kai-Sang Leung
2018 ch.
Encyclopedia of Database Systems (2nd ed.)
Carson Kai-Sang Leung
2017 J jnl
World Wide Web
Carson Kai-Sang Leung, Richard Kyle MacKinnon, Fan Jiang
2017 B conf
DaWaK
Peter Braun, Alfredo Cuzzocrea, Fan Jiang, Carson Kai-Sang Leung, Adam G. M. Pazdor
2016 J jnl
Int. J. Knowl. Based Intell. Eng. Syst.
Carson Kai-Sang Leung, Syed Khairuzzaman Tanbeer, Alfredo Cuzzocrea, Peter Braun, Richard Kyle MacKinnon
2016 J jnl
Inf. Sci.
Akiz Uddin Ahmed, Chowdhury Farhan Ahmed, Md. Samiullah, Nahim Adnan, Carson Kai-Sang Leung
2016 conf
BIBM
Fan Jiang, Carson Kai-Sang Leung, Oluwafemi A. Sarumi, Christine Y. Zhang
2016 J jnl
Concurr. Comput. Pract. Exp.
Carson Kai-Sang Leung, Fan Jiang, Adam G. M. Pazdor, Aaron M. Peddle
2015 J jnl
Algorithms
Fan Jiang, Carson Kai-Sang Leung
2015 B conf
DaWaK
Carson Kai-Sang Leung, Richard Kyle MacKinnon
2015 B conf
DaWaK
Carson Kai-Sang Leung, Fan Jiang
2015 conf
C3S2E
Fan Jiang, Kyoji Kawagoe, Carson Kai-Sang Leung
2015 conf
DSDIS
Fan Jiang, Carson Kai-Sang Leung, Dacheng Liu
2015 conf
EDBT/ICDT Workshops
Alfredo Cuzzocrea, Fan Jiang, Carson Kai-Sang Leung
2015 conf
C3S2E
Carson Kai-Sang Leung, Alfredo Cuzzocrea
2015 J jnl
Trans. Large Scale Data Knowl. Centered Syst.
Alfredo Cuzzocrea, Fan Jiang, Carson Kai-Sang Leung, Dacheng Liu, Aaron M. Peddle, Syed Khairuzzaman Tanbeer
2015 B conf
KES
Kyoji Kawagoe, Carson Kai-Sang Leung
2014 conf
ICDM Workshops
Fan Jiang, Carson Kai-Sang Leung
2014 conf
BDCloud
Carson Kai-Sang Leung, Fan Jiang
2014 conf
PAKDD Workshops
Richard Kyle MacKinnon, Carson Kai-Sang Leung, Syed Khairuzzaman Tanbeer
2014 B conf
KES
Peter Braun, Alfredo Cuzzocrea, Carson Kai-Sang Leung, Richard Kyle MacKinnon, Syed Khairuzzaman Tanbeer
2014 C conf
IDEAS
Carson Kai-Sang Leung, Richard Kyle MacKinnon, Yang Wang
2014 B conf
DaWaK
Carson Kai-Sang Leung, Richard Kyle MacKinnon
2014 conf
PAKDD Workshops
Fan Jiang, Carson Kai-Sang Leung, Richard Kyle MacKinnon
2014 conf
ICDM Workshops
Richard Kyle MacKinnon, Teagan D. Strauss, Carson Kai-Sang Leung
2014 conf
BDCloud
Fan Jiang, Carson Kai-Sang Leung, Dacheng Liu, Aaron M. Peddle
2014 conf
AINA Workshops
Carson Kai-Sang Leung, Richard Kyle MacKinnon, Fan Jiang
2014 B conf
KES
Peter Braun, Juan J. Cameron, Alfredo Cuzzocrea, Fan Jiang, Carson Kai-Sang Leung
2014 C conf
APWeb
Alfredo Cuzzocrea, Fan Jiang, Wookey Lee, Carson Kai-Sang Leung
2014 A* conf
ICDM
Carson Kai-Sang Leung, Richard Kyle MacKinnon
2014 conf
EDBT/ICDT Workshops
Juan J. Cameron, Alfredo Cuzzocrea, Fan Jiang, Carson Kai-Sang Leung
2014 J jnl
J. Organ. Comput. Electron. Commer.
Syed Khairuzzaman Tanbeer, Carson Kai-Sang Leung, Juan J. Cameron
2014 J jnl
Soc. Netw. Anal. Min.
Carson Kai-Sang Leung, Syed Khairuzzaman Tanbeer, Juan J. Cameron
2014 B conf
DaWaK
Fan Jiang, Carson Kai-Sang Leung
2014 J jnl
Future Gener. Comput. Syst.
Alfredo Cuzzocrea, Carson Kai-Sang Leung, Richard Kyle MacKinnon
2014 conf
EDBT/ICDT Workshops
Alfredo Cuzzocrea, Carson Kai-Sang Leung, Syed Khairuzzaman Tanbeer
2014 conf
BDCloud
Wookey Lee, Carson Kai-Sang Leung, Justin JongSu Song
2014 conf
BigData Congress
Carson Kai-Sang Leung, Richard Kyle MacKinnon, Fan Jiang
2014 B conf
KES
Carson Kai-Sang Leung, Kyle W. Joseph
2014 B conf
KES
Carson Kai-Sang Leung, Richard Kyle MacKinnon, Syed Khairuzzaman Tanbeer
2014 ch.
Frequent Pattern Mining
Carson Kai-Sang Leung
2013 J jnl
Trans. Large Scale Data Knowl. Centered Syst.
Carson Kai-Sang Leung, Alfredo Cuzzocrea, Fan Jiang
2013 C conf
APWeb
Syed Khairuzzaman Tanbeer, Carson Kai-Sang Leung
2013 conf
CASoN
Syed Khairuzzaman Tanbeer, Fan Jiang, Carson Kai-Sang Leung, Richard Kyle MacKinnon, Irish J. M. Medina
2013 J jnl
Int. J. Inf. Retr. Res.
Carson Kai-Sang Leung, Christopher L. Carmichael, Patrick Johnstone, David Sonny Hung-Cheung Yuen
2013 conf
WAIM
Juan J. Cameron, Alfredo Cuzzocrea, Fan Jiang, Carson Kai-Sang Leung
2013 conf
PAKDD (1)
Anna Fariha, Chowdhury Farhan Ahmed, Carson Kai-Sang Leung, S. M. Abdullah, Longbing Cao
2013 conf
DASFAA (1)
Carson Kai-Sang Leung, Yaroslav Hayduk
2013 conf
PAKDD (1)
Carson Kai-Sang Leung, Syed Khairuzzaman Tanbeer
2013 B conf
DaWaK
Fan Jiang, Carson Kai-Sang Leung
2013 Misc conf
SAC
Juan J. Cameron, Alfredo Cuzzocrea, Carson Kai-Sang Leung
2012 conf
CGC
Wookey Lee, Carson Kai-Sang Leung, Justin JongSu Song, Chris Soo-Hyun Eom
2012 C conf
IDEAS
Carson Kai-Sang Leung, Fan Jiang, Lijing Sun, Yan Wang
2012 Misc conf
SAC
Carson Kai-Sang Leung, Lijing Sun
2012 conf
CASoN
Syed Khairuzzaman Tanbeer, Carson Kai-Sang Leung, Juan J. Cameron
2012 conf
DEXA (1)
Nidhi R. Arora, Wookey Lee, Carson Kai-Sang Leung, Jin-Ho Kim, Harshit Kumar
2012 C conf
ISMIS
Alfredo Cuzzocrea, Carson Kai-Sang Leung
2012 conf
DASFAA (1)
Carson Kai-Sang Leung, Syed Khairuzzaman Tanbeer
2012 conf
CGC
Fan Jiang, Carson Kai-Sang Leung, Syed Khairuzzaman Tanbeer
2012 conf
SEBD
Alfredo Cuzzocrea, Carson Kai-Sang Leung
2012 B conf
DaWaK
Carson Kai-Sang Leung, Syed Khairuzzaman Tanbeer
2012 conf
DASFAA Workshops
Carson Kai-Sang Leung, Syed Khairuzzaman Tanbeer
2012 C conf
IDEAS
Carson Kai-Sang Leung, Syed Khairuzzaman Tanbeer, Bhavek P. Budhia, Lauren C. Zacharias
2012 conf
PAKDD (2)
Carson Kai-Sang Leung, Fan Jiang
2012 B conf
KES
Bhavek P. Budhia, Alfredo Cuzzocrea, Carson Kai-Sang Leung
2011 C conf
IDEAS
Carson Kai-Sang Leung, Fan Jiang, Yaroslav Hayduk
2011 C conf
APWeb
Wookey Lee, Justin JongSu Song, Carson Kai-Sang Leung
2011 conf
ICA3PP (1)
Alfredo Cuzzocrea, Carson Kai-Sang Leung
2011 Misc conf
SAC
Carson Kai-Sang Leung, Lijing Sun
2011 C conf
DASC
Juan J. Cameron, Carson Kai-Sang Leung, Syed Khairuzzaman Tanbeer
2011 conf
ICDM Workshops
Carson Kai-Sang Leung, Fan Jiang, Pourang P. Irani
2011 B conf
DaWaK
Carson Kai-Sang Leung, Fan Jiang
2011 Misc conf
SAC
Carson Kai-Sang Leung, Fan Jiang
2011 conf
KES (2)
Nihad Karim Chowdhury, Carson Kai-Sang Leung
2011 J jnl
WIREs Data Mining Knowl. Discov.
Carson Kai-Sang Leung
2011 J jnl
IEEE Trans. Ind. Electron.
Wookey Lee, Carson Kai-Sang Leung, James Jung-Hoon Lee
2011 conf
HCI (20)
Carson Kai-Sang Leung, Christopher L. Carmichael, Eu Wern Teh
2011 conf
ICDM Workshops
Christopher L. Carmichael, Yaroslav Hayduk, Carson Kai-Sang Leung
2010 conf
IHI
Hossein Pourreza, Sergio Camorlinga, Carson Kai-Sang Leung, Bruce D. Martin
2010 ed.
C3S2E
Bipin C. Desai, Carson Kai-Sang Leung, Sudhir P. Mudur
2010 conf
ICDE Workshops
Carson Kai-Sang Leung, Boyu Hao, Fan Jiang
2010 conf
SocialCom/PASSAT
Carson Kai-Sang Leung, Christopher L. Carmichael
2010 Misc conf
SAC
Carson Kai-Sang Leung, Boyu Hao, Dale A. Brajczuk
2010 C conf
IDEAS
Carson Kai-Sang Leung, Dale A. Brajczuk
2009 A conf
CIKM
Wookey Lee, James Jung-Hoon Lee, Young Kuk Kim, Carson Kai-Sang Leung
2009 ch.
Encyclopedia of Database Systems
Carson Kai-Sang Leung
2009 ed.
C3S2E
Bipin C. Desai, Carson Kai-Sang Leung, Olga Ormandjieva
2009 ch.
Encyclopedia of Data Warehousing and Mining
Carson Kai-Sang Leung
2009 ch.
Encyclopedia of Database Systems
Carson Kai-Sang Leung
2009 conf
KDD Workshop on Knowledge Discovery from Uncertain Data
Carson Kai-Sang Leung, Dale A. Brajczuk
2009 J jnl
SIGKDD Explor.
Carson Kai-Sang Leung, Dale A. Brajczuk
2009 J jnl
SIGKDD Explor.
Carson Kai-Sang Leung, Christopher L. Carmichael
2009 conf
KDD Workshop on Visual Analytics and Knowledge Discovery
Carson Kai-Sang Leung, Christopher L. Carmichael
2009 ch.
Encyclopedia of Database Systems
Carson Kai-Sang Leung
2009 A* conf
ICDE
Carson Kai-Sang Leung, Boyu Hao
2009 C conf
IDEAS
Carson Kai-Sang Leung, Dale A. Brajczuk
2009 ch.
Encyclopedia of Database Systems
Carson Kai-Sang Leung
2009 ch.
Encyclopedia of Database Systems
Carson Kai-Sang Leung
2008 B conf
PAKDD
Carson Kai-Sang Leung, Mark Anthony F. Mateo, Dale A. Brajczuk
2008 conf
C3S2E
Boyu Hao, Carson Kai-Sang Leung, Sergio Camorlinga, Martin H. Reed, Martin K. Bunge, Jens Wrogemann, Rick J. Higgins
2008 conf
C3S2E
Mark Anthony F. Mateo, Carson Kai-Sang Leung
2008 conf
BNCOD
Carson Kai-Sang Leung, Dale A. Brajczuk
2008 C conf
IDEAS
Carson Kai-Sang Leung, Dale A. Brajczuk, Jialiang Yu
2008 B conf
PAKDD
Carson Kai-Sang Leung, Pourang Irani, Christopher L. Carmichael
2008 A* conf
ICDM
Carson Kai-Sang Leung, Pourang Irani, Christopher L. Carmichael
2007 C conf
IDEAS
Carson Kai-Sang Leung, Mark Anthony F. Mateo, Andrew J. Nadler
2007 J jnl
Knowl. Inf. Syst.
Carson Kai-Sang Leung, Quamrul I. Khan, Zhan Li, Tariqul Hoque
2007 conf
ICDM Workshops
Carson Kai-Sang Leung, Christopher L. Carmichael, Boyu Hao
2006 conf
BNCOD
Carson Kai-Sang Leung, Ruppa K. Thulasiram, Dmitri A. Bondarenko
2006 A* conf
ICDM
Carson Kai-Sang Leung, Quamrul I. Khan
2006 conf
IAT Workshops
Carson Kai-Sang Leung, Quamrul I. Khan, Boyu Hao
2006 C conf
IDEAS
Carson Kai-Sang Leung, Quamrul I. Khan
2006 conf
BNCOD
Carson Kai-Sang Leung, Wookey Lee
2005 A* conf
ICDM
Carson Kai-Sang Leung, Quamrul I. Khan, Tariqul Hoque
2005 conf
BNCOD
Carson Kai-Sang Leung, Wookey Lee
2004 conf
CDB
Carson Kai-Sang Leung
2004 conf
HPCS
Carson Kai-Sang Leung
2004 C conf
IDEAS
Carson Kai-Sang Leung
2003 J jnl
ACM Trans. Database Syst.
Laks V. S. Lakshmanan, Carson Kai-Sang Leung, Raymond T. Ng
2002 J jnl
SIGKDD Explor.
Carson Kai-Sang Leung, Laks V. S. Lakshmanan, Raymond T. Ng
2002 A* conf
ICDE
Carson Kai-Sang Leung, Raymond T. Ng, Heikki Mannila
2000 J jnl
SIGKDD Explor.
Laks V. S. Lakshmanan, Carson Kai-Sang Leung, Raymond T. Ng
1998 conf
Storage and Retrieval for Image and Video Databases (SPIE)
Carson Kai-Sang Leung, Raymond T. Ng
1998 conf
VDB
Carson Kai-Sang Leung, Raymond T. Ng
redb/extractors/macho_extractors/macho_features.py
← Index redb/extractors/macho_extractors/macho_features.py python
import inspect
import json
from datetime import datetime, timezone
from typing import Any

from redb.extractors.enum import Tag
from redb.extractors.macho_extractor import MachOExtractor
from redb.models.dataclasses import MachO


class MachOFeaturesExtractor(MachOExtractor):

    def __init__(
        self,
        filepath,
        log,
        exporters=None,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
        macho=None,
    ):
        super().__init__(
            filepath,
            log,
            exporters,
            index_prefix,
            elastic_index,
            known_benign,
            known_malicious,
            macho,
        )
        self.elastic_index = self.index_prefix + "-macho_features"
        self.log.debug(inspect.currentframe().f_code.co_name)

    def tag(self):
        return Tag.MACHO_FEATURES.value

    def _extract_macho_features_for_arch(self, arch_name):
        """Extract basic MachO features for a specific architecture."""
        self.log.debug(inspect.currentframe().f_code.co_name)

        if not self.macho:
            return None

        try:
            # Get general info using new API
            general_info = self.macho.get_general_info()
            if not general_info:
                return None

            # Get header info for this specific architecture
            header_raw = self.macho.get_macho_header(arch=arch_name)
            header_formatted = self.macho.get_macho_header(arch=arch_name, formatted=True)

            if not header_raw or not header_formatted:
                return None

            # Get entry point using new API
            entry_point = None
            try:
                entry_point_info = self.macho.get_entry_point(arch=arch_name)
                if entry_point_info:
                    if isinstance(entry_point_info, dict):
                        entry_point = entry_point_info.get('entryoff') or entry_point_info.get('entry_address')
                    else:
                        entry_point = entry_point_info
            except Exception as e:
                self.log.debug(f"No entry point found: {e}")

            # Get UUID using new API
            uuid = None
            try:
                uuid_info = self.macho.get_uuid(arch=arch_name)
                if uuid_info:
                    uuid = str(uuid_info)
            except Exception as e:
                self.log.debug(f"No UUID found: {e}")

            # Get version info using new API with formatting
            version_info = None
            version_info_str = None
            try:
                version_info = self.macho.get_version_info(arch=arch_name)
                version_info_str = self.macho.get_version_info(arch=arch_name, formatted=True)
            except Exception as e:
                self.log.debug(f"No version info found: {e}")

            # Get segments using new API
            segments = self.macho.get_segments(arch=arch_name)
            number_of_segments = len(segments) if segments else 0

            # Get dylib info using new API
            dylib_names = self.macho.get_dylib_names(arch=arch_name)
            number_of_dylibs = len(dylib_names) if dylib_names else 0

            # Count imports using new API
            imported_functions = self.macho.get_imported_functions(arch=arch_name)
            number_of_imports = sum(len(funcs) for funcs in imported_functions.values()) if imported_functions else 0

            # Count exports using new API
            exported_symbols = self.macho.get_exported_symbols(arch=arch_name)
            number_of_exports = sum(len(symbols) for symbols in exported_symbols.values()) if exported_symbols else 0

            # Get unique load command types using new API
            load_commands_set = self.macho.get_load_commands_set(arch=arch_name, formatted=True)
            if isinstance(load_commands_set, set):
                load_commands_set = sorted(list(load_commands_set))

            # Get architectures for listing purposes
            architectures = self.macho.get_architectures()

            # Determine binary properties
            is_64bit = header_raw.get('magic') in [0xFEEDFACF, 0xCFFAEDFE]  # MH_MAGIC_64, MH_CIGAM_64
            is_signed = self._is_signed()
            
            # Create MachO dataclass
            macho_features = MachO(
                # Raw values from new API
                magic=header_raw.get('magic', 0),
                cputype=header_raw.get('cputype', 0),
                cpusubtype=header_raw.get('cpusubtype', 0),
                filetype=header_raw.get('filetype', 0),
                ncmds=header_raw.get('ncmds', 0),
                sizeofcmds=header_raw.get('sizeofcmds', 0),
                flags=header_raw.get('flags', 0),
                architecture=header_raw.get('cputype', 0),  # Use cputype as architecture
                architectures=[arch_info.get('cputype', 0) for arch_info in [self.macho.get_macho_header(arch=arch) for arch in architectures] if arch_info],
                # Human-readable values from formatted API
                magic_str=header_formatted.get('magic', ''),
                cputype_str=header_formatted.get('cputype', ''),
                cpusubtype_str=header_formatted.get('cpusubtype', ''),
                filetype_str=header_formatted.get('filetype', ''),
                flags_str=header_formatted.get('flags', '').split(', ') if header_formatted.get('flags') else [],
                architecture_str=header_formatted.get('cputype', ''),
                architectures_str=[arch_info.get('cputype', '') for arch_info in [self.macho.get_macho_header(arch=arch, formatted=True) for arch in architectures] if arch_info],
                # Additional properties
                is_64bit=is_64bit,
                is_signed=is_signed,
                number_of_load_commands=header_raw.get('ncmds', 0),
                load_commands_set=load_commands_set,
                number_of_segments=number_of_segments,
                number_of_dylibs=number_of_dylibs,
                number_of_imports=number_of_imports,
                number_of_exports=number_of_exports,
                entry_point=entry_point,
                uuid=uuid,
                version_info=version_info,
                version_info_str=version_info_str
            )
            
            return macho_features
            
        except Exception as e:
            self.log.error(f"Error extracting MachO features: {e}")
            return None

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            if not self.macho:
                return None
            architectures = self.macho.get_architectures()
            if not architectures:
                return None

            # For FAT binaries, return features for all architectures
            # For single arch, return just the single result
            if len(architectures) > 1:
                # FAT binary - return list of features for each architecture
                results = []
                for arch_name in architectures:
                    features = self._extract_macho_features_for_arch(arch_name)
                    if features:
                        # Add architecture identifier to the result
                        if hasattr(features, '__dict__'):
                            # If it's a dataclass, we can access its dict
                            features.arch_identifier = arch_name
                        results.append(features)
                return results
            else:
                # Single architecture - return single result
                return self._extract_macho_features_for_arch(architectures[0])
        except Exception as e:
            self.log.error(f"Error extracting MachO features: {e}")
            return None

    def prepare_export_data(self, exporter_type: str) -> Any:
        if exporter_type == "ElasticsearchExporter":
            return self.extract()
        elif exporter_type == "ClickHouseExporter":
            if not self.macho:
                return None

            # Get architectures (macho is already parsed in __init__)
            try:
                architectures = self.macho.get_architectures()
            except Exception as e:
                self.log.error(f"Could not get architectures: {e}")
                return None

            data = []
            current_time = datetime.now(timezone.utc)

            # Loop through each architecture (1 for single, multiple for FAT)
            for arch_name in architectures:
                # Extract features for this specific architecture
                macho_features = self._extract_macho_features_for_arch(arch_name)
                if not macho_features:
                    continue

                # Get architecture-specific sha256
                try:
                    arch_general_info = self.macho.get_general_info(arch=arch_name)
                    arch_sha256 = arch_general_info.get('SHA256', self.sha256)
                except Exception as e:
                    self.log.warning(f"Could not get arch-specific hash for {arch_name}: {e}")
                    arch_sha256 = self.sha256

                # Architecture field (kept in features table for ORDER BY)
                architecture = macho_features.cputype    # Raw CPU type value

                data.append([
                    arch_sha256,                          # sha256 (architecture-specific)
                    architecture,                         # architecture (raw CPU type)
                    # Raw values
                    macho_features.magic,                 # magic
                    macho_features.cputype,               # cputype
                    macho_features.cpusubtype,            # cpusubtype
                    macho_features.filetype,              # filetype
                    macho_features.ncmds,                 # ncmds
                    macho_features.sizeofcmds,            # sizeofcmds
                    macho_features.flags,                 # flags
                    # Human-readable values
                    macho_features.magic_str,             # magic_str
                    macho_features.cputype_str,           # cputype_str
                    macho_features.cpusubtype_str,        # cpusubtype_str
                    macho_features.filetype_str,          # filetype_str
                    macho_features.flags_str,             # flags_str
                    # Other fields
                    macho_features.is_64bit,              # is_64bit
                    macho_features.is_signed,             # is_signed
                    macho_features.entry_point if macho_features.entry_point else None,           # entry_point
                    macho_features.uuid if macho_features.uuid else None,  # uuid
                    json.dumps(macho_features.version_info) if macho_features.version_info else "{}",  # version_info
                    json.dumps(macho_features.version_info_str) if macho_features.version_info_str else "{}",  # version_info_str
                    macho_features.load_commands_set,     # load_commands_set
                    macho_features.number_of_segments,    # number_of_segments
                    macho_features.number_of_dylibs,      # number_of_dylibs
                    macho_features.number_of_imports,     # number_of_imports
                    macho_features.number_of_exports,     # number_of_exports
                    current_time,                         # analysis_date
                ])

            column_names = [
                'sha256', 'architecture',
                # Raw values
                'magic', 'cputype', 'cpusubtype', 'filetype', 'ncmds', 'sizeofcmds', 'flags',
                # Human-readable values
                'magic_str', 'cputype_str', 'cpusubtype_str', 'filetype_str', 'flags_str',
                # Other fields
                'is_64bit', 'is_signed',
                'entry_point', 'uuid', 'version_info', 'version_info_str', 'load_commands_set',
                'number_of_segments', 'number_of_dylibs', 'number_of_imports', 'number_of_exports',
                'analysis_date'
            ]

            if not data:
                return None

            column_type_names = [
                'FixedString(64)', 'Nullable(UInt32)',
                # Raw values
                'UInt32', 'UInt32', 'UInt32', 'UInt32', 'UInt32', 'UInt32', 'UInt32',
                # Human-readable values
                'LowCardinality(String)', 'LowCardinality(String)', 'LowCardinality(String)', 'LowCardinality(String)', 'Array(LowCardinality(String))',
                # Other fields
                'UInt8', 'UInt8',
                'Nullable(UInt64)', 'Nullable(String)', 'JSON', 'JSON', 'Array(Nullable(String))',
                'UInt32', 'UInt32', 'UInt32', 'UInt32', 'DateTime64(3, \'UTC\')'
            ]

            return (data, column_names, column_type_names)
        
        return None

    def get_clickhouse_table(self) -> str:
        return "redb_macho_features"