Carolina Scarton

147 papers A* 7A 5B 4C 5Misc 3Journal 65Unranked 53
YearRankTypeTitle / Venue / Authors
2026 J jnl
ACM Trans. Intell. Syst. Technol.
Ivan Srba, Olesya Razuvayevskaya, João Augusto Leite, Róbert Móro, Ipek Baris Schlicht, Sara Tonelli, Francisco Moreno García, Santiago Barrio Lottmann, Denis Teyssou, Valentin Porcellini, Carolina Scarton, Kalina Bontcheva, Mária Bieliková
2026 J jnl
CoRR
João Augusto Leite, Olesya Razuvayevskaya, Kalina Bontcheva, Carolina Scarton
2025 conf
WWW (Companion Volume)
João Augusto Leite, Olesya Razuvayevskaya, Carolina Scarton, Kalina Bontcheva
2025 J jnl
CoRR
Ahmad Zareie, Kalina Bontcheva, Carolina Scarton
2025 J jnl
CoRR
João Augusto Leite, Arnav Arora, Silvia Gargova, João Luz, Gustavo Sampaio, Ian Roberts, Carolina Scarton, Kalina Bontcheva
2025 J jnl
CoRR
Diego A. B. Moreira, Alef I. Ferreira, Jhessica Silva, Gabriel Oliveira dos Santos, Gustavo Bonil, João Medrado Gondim, Viviane Bonadia dos Santos, Helena Almeida Maia, Simone Tiemi Hashiguti, Nádia Félix F. da Silva, Carolina Scarton, Hélio Pedrini, Sandra Avila
2025 J jnl
CoRR
Jake Vasilakes, Carolina Scarton, Zhixue Zhao
2025 J jnl
CoRR
Iknoor Singh, Carolina Scarton, Kalina Bontcheva
2025 J jnl
Online Soc. Networks Media
Ahmad Zareie, Mehmet E. Bakir, Mark A. Greenwood, Kalina Bontcheva, Carolina Scarton
2025 A* conf
EMNLP
Yue Li, Zhixue Zhao, Carolina Scarton
2025 J jnl
CoRR
Yue Li, Zhixue Zhao, Carolina Scarton
2025 A* conf
EMNLP
Yue Li, Zhixue Zhao, Carolina Scarton
2025 J jnl
CoRR
Tomas Goldsack, Carolina Scarton, Chenghua Lin
2025 J jnl
CoRR
Yue Li, Jake Vasilakes, Zhixue Zhao, Carolina Scarton
2025 J jnl
CoRR
Thomas Pickard, Aline Villavicencio, Maggie Mi, Wei He, Dylan Phelps, Carolina Scarton, Marco Idiart
2025 A conf
ICWSM
Fatima Haouari, Carolina Scarton, Nicolò Faggiani, Nikolaos Nikolaidis, Bonka Kotseva, Ibrahim Abu Farha, Jens P. Linge, Kalina Bontcheva
2025 J jnl
CoRR
Fatima Haouari, Carolina Scarton, Nicolò Faggiani, Nikolaos Nikolaidis, Bonka Kotseva, Ibrahim Abu Farha, Jens P. Linge, Kalina Bontcheva
2025 J jnl
EPJ Data Sci.
João Augusto Leite, Olesya Razuvayevskaya, Kalina Bontcheva, Carolina Scarton
2024 conf
EAMT (1)
Sebastian T. Vincent, Charlotte Prescott, Chris Bayliss, Chris Oakley, Carolina Scarton
2024 J jnl
CoRR
Sebastian T. Vincent, Charlotte Prescott, Chris Bayliss, Chris Oakley, Carolina Scarton
2024 J jnl
CoRR
João Augusto Leite, Olesya Razuvayevskaya, Carolina Scarton, Kalina Bontcheva
2024 conf
ASONAM (2)
Ahmad Zareie, Kalina Bontcheva, Carolina Scarton
2024 J jnl
CoRR
Ivan Srba, Olesya Razuvayevskaya, João Augusto Leite, Róbert Móro, Ipek Baris Schlicht, Sara Tonelli, Francisco Moreno García, Santiago Barrio Lottmann, Denis Teyssou, Valentin Porcellini, Carolina Scarton, Kalina Bontcheva, Mária Bieliková
2024 conf
ACL (Short Papers)
Zhihao Zhang, Tomas Goldsack, Carolina Scarton, Chenghua Lin
2024 J jnl
CoRR
Zhihao Zhang, Tomas Goldsack, Carolina Scarton, Chenghua Lin
2024 J jnl
Expert Syst. Appl.
Matheus V. V. Berto, Breno L. Freitas, Carolina Scarton, João A. Machado-Neto, Tiago A. Almeida
2024 conf
LREC/COLING
Yue Li, Carolina Scarton
2024 A conf
CIKM
João Augusto Leite, Olesya Razuvayevskaya, Kalina Bontcheva, Carolina Scarton
2024 J jnl
CoRR
João Augusto Leite, Olesya Razuvayevskaya, Kalina Bontcheva, Carolina Scarton
2024 conf
ACL (Findings)
Wei He, Marco Idiart, Carolina Scarton, Aline Villavicencio
2024 J jnl
CoRR
Wei He, Marco Idiart, Carolina Scarton, Aline Villavicencio
2024 conf
EAMT (2)
Jake Vasilakes, Zhixue Zhao, Michal Gregor, Ivan Vykopal, Martin Hyben, Carolina Scarton
2024 J jnl
CoRR
Jake Vasilakes, Zhixue Zhao, Ivan Vykopal, Michal Gregor, Martin Hyben, Carolina Scarton
2024 J jnl
CoRR
Wei He, Tiago Kramer Vieira, Marcos García, Carolina Scarton, Marco Idiart, Aline Villavicencio
2024 J jnl
CoRR
Yue Li, Zhixue Zhao, Carolina Scarton
2024 conf
EAMT (2)
Brendan Spillane, Carolina Scarton, Róbert Móro, Petar Ivanov, Andrey Tagarev, Jakub Simko, Ibrahim Abu Farha, Gary Munnelly, Filip Uhlárik, Freddy Heppell
2024 conf
LREC/COLING
Yida Mu, Ben P. Wu, William Thorne, Ambrose Robinson, Nikolaos Aletras, Carolina Scarton, Kalina Bontcheva, Xingyi Song
2024 conf
BioNLP@ACL
Tomas Goldsack, Carolina Scarton, Matthew Shardlow, Chenghua Lin
2024 J jnl
CoRR
Tomas Goldsack, Carolina Scarton, Matthew Shardlow, Chenghua Lin
2024 ed.
EAMT (1)
Carolina Scarton, Charlotte Prescott, Chris Bayliss, Chris Oakley, Joanna Wright, Stuart Wrigley, Xingyi Song, Edward Gow-Smith, Rachel Bawden, Víctor M. Sánchez-Cartagena, Patrick Cadwell, Ekaterina Lapshinova-Koltunski, Vera Cabarrão, Konstantinos Chatzitheodorou, Mary Nurminen, Diptesh Kanojia, Helena Moniz
2024 ed.
EAMT (2)
Carolina Scarton, Charlotte Prescott, Chris Bayliss, Chris Oakley, Joanna Wright, Stuart Wrigley, Xingyi Song, Edward Gow-Smith, Mikel Forcada, Helena L. Moniz
2024 conf
LREC/COLING
Sebastian T. Vincent, Rowanne Sumner, Alice Dowek, Charlotte Prescott, Emily Preston, Chris Bayliss, Chris Oakley, Carolina Scarton
2024 J jnl
CoRR
Edward Gow-Smith, Dylan Phelps, Harish Tayyar Madabushi, Carolina Scarton, Aline Villavicencio
2023 J jnl
CoRR
Yida Mu, Ye Jiang, Freddy Heppell, Iknoor Singh, Carolina Scarton, Kalina Bontcheva, Xingyi Song
2023 A* conf
EMNLP
Freddy Heppell, Kalina Bontcheva, Carolina Scarton
2023 J jnl
CoRR
Freddy Heppell, Kalina Bontcheva, Carolina Scarton
2023 conf
BioNLP@ACL
Tomas Goldsack, Zheheng Luo, Qianqian Xie, Carolina Scarton, Matthew Shardlow, Sophia Ananiadou, Chenghua Lin
2023 Misc conf
RANLP
Ye Jiang, Xingyi Song, Carolina Scarton, Iknoor Singh, Ahmet Aker, Kalina Bontcheva
2023 Misc conf
RANLP
Yue Li, Carolina Scarton, Xingyi Song, Kalina Bontcheva
2023 J jnl
CoRR
Olesya Razuvayevskaya, Ben Wu, João Augusto Leite, Freddy Heppell, Ivan Srba, Carolina Scarton, Kalina Bontcheva, Xingyi Song
2023 J jnl
CoRR
João Augusto Leite, Olesya Razuvayevskaya, Kalina Bontcheva, Carolina Scarton
2023 conf
ECIR (1)
Tomas Goldsack, Zhihao Zhang, Chenghua Lin, Carolina Scarton
2023 J jnl
CoRR
Ben Wu, Yue Li, Yida Mu, Carolina Scarton, Kalina Bontcheva, Xingyi Song
2023 conf
EMNLP (Findings)
Ben Wu, Yue Li, Yida Mu, Carolina Scarton, Kalina Bontcheva, Xingyi Song
2023 A* conf
EMNLP
Tomas Goldsack, Zhihao Zhang, Chen Tang, Carolina Scarton, Chenghua Lin
2023 J jnl
CoRR
Tomas Goldsack, Zhihao Zhang, Chen Tang, Carolina Scarton, Chenghua Lin
2023 J jnl
CoRR
Yue Li, Carolina Scarton
2023 J jnl
CoRR
Iknoor Singh, Carolina Scarton, Xingyi Song, Kalina Bontcheva
2023 conf
ACL (Findings)
Sebastian T. Vincent, Robert Flynn, Carolina Scarton
2023 J jnl
CoRR
Sebastian T. Vincent, Robert Flynn, Carolina Scarton
2023 J jnl
CoRR
Yida Mu, Ben P. Wu, William Thorne, Ambrose Robinson, Nikolaos Aletras, Carolina Scarton, Kalina Bontcheva, Xingyi Song
2023 Misc conf
RANLP
João Augusto Leite, Carolina Scarton, Diego F. Silva
2023 J jnl
CoRR
João Augusto Leite, Carolina Scarton, Diego F. Silva
2023 J jnl
CoRR
Tomas Goldsack, Zheheng Luo, Qianqian Xie, Carolina Scarton, Matthew Shardlow, Sophia Ananiadou, Chenghua Lin
2023 J jnl
CoRR
Sebastian T. Vincent, Rowanne Sumner, Alice Dowek, Charlotte Blundell, Emily Preston, Chris Bayliss, Chris Oakley, Carolina Scarton
2023 C ed.
EAMT
Mary Nurminen, Judith Brenner, Maarit Koponen, Sirkku Latomaa, Mikhail Mikhailov, Frederike Schierl, Tharindu Ranasinghe, Eva Vanmassenhove, Sergi Alvarez Vidal, Nora Aranberri, Mara Nunziatini, Carla Parra Escartín, Mikel L. Forcada, Maja Popovic, Carolina Scarton, Helena Moniz
2023 conf
SemEval@ACL
Ben Wu, Olesya Razuvayevskaya, Freddy Heppell, João Augusto Leite, Carolina Scarton, Kalina Bontcheva, Xingyi Song
2023 J jnl
CoRR
Ben Wu, Olesya Razuvayevskaya, Freddy Heppell, João Augusto Leite, Carolina Scarton, Kalina Bontcheva, Xingyi Song
2023 J jnl
EPJ Data Sci.
Iknoor Singh, Carolina Scarton, Kalina Bontcheva
2023 J jnl
CoRR
Yida Mu, Mali Jin, Charlie Grimshaw, Carolina Scarton, Kalina Bontcheva, Xingyi Song
2023 A conf
ICWSM
Yida Mu, Mali Jin, Charlie Grimshaw, Carolina Scarton, Kalina Bontcheva, Xingyi Song
2022 J jnl
CoRR
Yue Li, Carolina Scarton, Xingyi Song, Kalina Bontcheva
2022 conf
SocInfo
Iknoor Singh, Kalina Bontcheva, Xingyi Song, Carolina Scarton
2022 J jnl
CoRR
Iknoor Singh, Kalina Bontcheva, Xingyi Song, Carolina Scarton
2022 ed.
PROPOR
Vládia Pinheiro, Pablo Gamallo, Raquel Amaro, Carolina Scarton, Fernando Batista, Diego Furtado Silva, Catarina Magro, Hugo Pinto
2022 J jnl
CoRR
Sebastian T. Vincent, Loïc Barrault, Carolina Scarton
2022 C conf
EAMT
Sebastian T. Vincent, Loïc Barrault, Carolina Scarton
2022 conf
IWSLT@ACL
Sebastian T. Vincent, Loïc Barrault, Carolina Scarton
2022 J jnl
CoRR
Sebastian T. Vincent, Loïc Barrault, Carolina Scarton
2022 conf
SemEval@NAACL
Iknoor Singh, Yue Li, Melissa Thong, Carolina Scarton
2022 J jnl
CoRR
Iknoor Singh, Yue Li, Melissa Thong, Carolina Scarton
2022 A* conf
EMNLP
Edward Gow-Smith, Harish Tayyar Madabushi, Carolina Scarton, Aline Villavicencio
2022 J jnl
CoRR
Edward Gow-Smith, Harish Tayyar Madabushi, Carolina Scarton, Aline Villavicencio
2022 A* conf
EMNLP
Tomas Goldsack, Zhihao Zhang, Chenghua Lin, Carolina Scarton
2022 J jnl
CoRR
Tomas Goldsack, Zhihao Zhang, Chenghua Lin, Carolina Scarton
2022 C ed.
EAMT
Helena Moniz, Lieve Macken, Andrew Rufener, Loïc Barrault, Marta R. Costa-jussà, Christophe Declercq, Maarit Koponen, Ellie Kemp, Spyridon Pilos, Mikel L. Forcada, Carolina Scarton, Joachim Van den Bogaert, Joke Daems, Arda Tezcan, Bram Vanroy, Margot Fonteyne
2022 conf
MWE@LREC2022
Dylan Phelps, Xuan-Rui Fan, Edward Gow-Smith, Harish Tayyar Madabushi, Carolina Scarton, Aline Villavicencio
2022 J jnl
CoRR
Dylan Phelps, Xuan-Rui Fan, Edward Gow-Smith, Harish Tayyar Madabushi, Carolina Scarton, Aline Villavicencio
2022 conf
SemEval@NAACL
Harish Tayyar Madabushi, Edward Gow-Smith, Marcos García, Carolina Scarton, Marco Idiart, Aline Villavicencio
2022 J jnl
CoRR
Harish Tayyar Madabushi, Edward Gow-Smith, Marcos García, Carolina Scarton, Marco Idiart, Aline Villavicencio
2021 conf
EMNLP (Findings)
Harish Tayyar Madabushi, Edward Gow-Smith, Carolina Scarton, Aline Villavicencio
2021 J jnl
CoRR
Harish Tayyar Madabushi, Edward Gow-Smith, Carolina Scarton, Aline Villavicencio
2021 conf
ACL/IJCNLP (1)
Marcos García, Tiago Kramer Vieira, Carolina Scarton, Marco Idiart, Aline Villavicencio
2021 J jnl
CoRR
Ye Jiang, Xingyi Song, Carolina Scarton, Ahmet Aker, Kalina Bontcheva
2021 conf
TTO
Carolina Scarton, Yue Li
2021 J jnl
CoRR
Iknoor Singh, Carolina Scarton, Kalina Bontcheva
2021 A conf
EACL
Marcos García, Tiago Kramer Vieira, Carolina Scarton, Marco Idiart, Aline Villavicencio
2021 J jnl
Online Soc. Networks Media
Yelena Mejova, Marinella Petrocchi, Carolina Scarton
2021 J jnl
Comput. Linguistics
Fernando Alva-Manchego, Carolina Scarton, Lucia Specia
2021 J jnl
CoRR
Iknoor Singh, Kalina Bontcheva, Carolina Scarton
2020 A* conf
ACL
Fernando Alva-Manchego, Louis Martin, Antoine Bordes, Carolina Scarton, Benoît Sagot, Lucia Specia
2020 J jnl
CoRR
Fernando Alva-Manchego, Louis Martin, Antoine Bordes, Carolina Scarton, Benoît Sagot, Lucia Specia
2020 J jnl
Comput. Linguistics
Fernando Alva-Manchego, Carolina Scarton, Lucia Specia
2020 A conf
ECAI
Carolina Scarton, Pranava Madhyastha, Lucia Specia
2020 J jnl
Nat. Lang. Eng.
Carolina Scarton
2020 conf
PROPOR
Gabriela Wick-Pedro, Roney L. S. Santos, Oto A. Vale, Thiago A. S. Pardo, Kalina Bontcheva, Carolina Scarton
2020 conf
AACL/IJCNLP
Carolina Scarton, Diego F. Silva, Kalina Bontcheva
2020 J jnl
CoRR
Carolina Scarton, Diego F. Silva, Kalina Bontcheva
2020 B conf
LREC
Roney L. S. Santos, Gabriela Wick-Pedro, Sidney Evaldo Leal, Oto A. Vale, Thiago A. S. Pardo, Kalina Bontcheva, Carolina Scarton
2020 conf
AACL/IJCNLP
João Augusto Leite, Diego F. Silva, Kalina Bontcheva, Carolina Scarton
2020 J jnl
CoRR
João Augusto Leite, Diego F. Silva, Kalina Bontcheva, Carolina Scarton
2019 conf
WNLP@ACL
Fernando Alva-Manchego, Carolina Scarton, Lucia Specia
2019 conf
EMNLP/IJCNLP (3)
Fernando Alva-Manchego, Louis Martin, Carolina Scarton, Lucia Specia
2019 J jnl
CoRR
Fernando Alva-Manchego, Louis Martin, Carolina Scarton, Lucia Specia
2019 conf
IWSLT
Carolina Scarton, Mikel L. Forcada, Miquel Esplà-Gomis, Lucia Specia
2019 J jnl
CoRR
Carolina Scarton, Mikel L. Forcada, Miquel Esplà-Gomis, Lucia Specia
2018 J jnl
CoRR
Mikel L. Forcada, Carolina Scarton, Lucia Specia, Barry Haddow, Alexandra Birch
2018 conf
WMT
Mikel L. Forcada, Carolina Scarton, Lucia Specia, Barry Haddow, Alexandra Birch
2018 conf
ACL (2)
Carolina Scarton, Lucia Specia
2018 book
Lucia Specia, Carolina Scarton, Gustavo Henrique Paetzold
2018 conf
WMT (shared task)
Chiraag Lala, Pranava Swaroop Madhyastha, Carolina Scarton, Lucia Specia
2018 conf
WMT (shared task)
Julia Ive, Carolina Scarton, Frédéric Blain, Lucia Specia
2018 B conf
LREC
Carolina Scarton, Gustavo Paetzold, Lucia Specia
2018 B conf
LREC
Carolina Scarton, Gustavo Paetzold, Lucia Specia
2017 conf
WMT
Frédéric Blain, Carolina Scarton, Lucia Specia
2017 conf
EACL (2)
Yvette Graham, Qingsong Ma, Timothy Baldwin, Qun Liu, Carla Parra Escartín, Carolina Scarton
2017 conf
IJCNLP(1)
Fernando Alva-Manchego, Joachim Bingel, Gustavo Paetzold, Carolina Scarton, Lucia Specia
2017 conf
IJCNLP (System Demonstrations)
Carolina Scarton, Alessio Palmero Aprosio, Sara Tonelli, Tamara Martín-Wanton, Lucia Specia
2016 B conf
LREC
Carolina Scarton, Lucia Specia
2016
Carolina Scarton
2016 conf
PROPOR
Sandra M. Aluísio, Andre Cunha, Carolina Scarton
2016 conf
WMT
Ondrej Bojar, Rajen Chatterjee, Christian Federmann, Yvette Graham, Barry Haddow, Matthias Huck, Antonio Jimeno-Yepes, Philipp Koehn, Varvara Logacheva, Christof Monz, Matteo Negri, Aurélie Névéol, Mariana L. Neves, Martin Popel, Matt Post, Raphael Rubino, Carolina Scarton, Lucia Specia, Marco Turchi, Karin Verspoor, Marcos Zampieri
2016 conf
COLING (Tutorials)
Carolina Scarton, Gustavo Paetzold, Lucia Specia
2016 conf
SemEval@NAACL-HLT
Liling Tan, Carolina Scarton, Lucia Specia, Josef van Genabith
2016 conf
WMT
Carolina Scarton, Daniel Beck, Kashif Shah, Karin Sim Smith, Lucia Specia
2015 conf
HLT-NAACL
Carolina Scarton
2015 conf
WMT@EMNLP
Ondrej Bojar, Rajen Chatterjee, Christian Federmann, Barry Haddow, Matthias Huck, Chris Hokamp, Philipp Koehn, Varvara Logacheva, Christof Monz, Matteo Negri, Matt Post, Carolina Scarton, Lucia Specia, Marco Turchi
2015 conf
ACL (System Demonstrations)
Lucia Specia, Gustavo Paetzold, Carolina Scarton
2015 C conf
EAMT
Carolina Scarton, Marcos Zampieri, Mihaela Vela, Josef van Genabith, Lucia Specia
2015 conf
SemEval@NAACL-HLT
Liling Tan, Carolina Scarton, Lucia Specia, Josef van Genabith
2015 conf
WMT@EMNLP
Carolina Scarton, Liling Tan, Lucia Specia
2014 C conf
EAMT
Carolina Scarton, Lucia Specia
2014 conf
WMT@ACL
Carolina Scarton, Lucia Specia
2014 conf
PROPOR
Carolina Scarton, Magali Sanches Duran, Sandra Maria Aluísio
2014 conf
CICLing (1)
Carolina Scarton, Lin Sun, Karin Kipper Schuler, Magali Sanches Duran, Martha Palmer, Anna Korhonen
2010 conf
IBERAMIA
Carolina Scarton, Caroline Gasperin, Sandra M. Aluísio
2010 conf
NAACL (Demos)
Carolina Scarton, Matheus de Oliveira, Arnaldo Cândido Júnior, Caroline Gasperin, Sandra M. Aluísio
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"