Verena Nitsch

80 papers A* 1B 4C 10Journal 24Unranked 40
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Trans. Haptics
Apostolos Vrontos, Verena Nitsch, Alexander Mertens, Christopher Brandl
2025 J jnl
Virtual Real.
Apostolos Vrontos, Reza Zolnouri, Alexander Mertens, Verena Nitsch, Christopher Brandl
2025 J jnl
CoRR
Constantin Buschhaus, Arvid Butting, Judith Michael, Verena Nitsch, Sebastian Pütz, Bernhard Rumpe, Carolin Stellmacher, Sabine Theis
2025 J jnl
Data Knowl. Eng.
Constantin Buschhaus, Arvid Butting, Judith Michael, Verena Nitsch, Sebastian Pütz, Bernhard Rumpe, Carolin Stellmacher, Sabine Theis
2025 B conf
SMC
Apostolos Vrontos, Reza Zolnouri, Verena Nitsch, Alexander Mertens, Christopher Brandl
2025 J jnl
Hum. Factors
Sebastian Pütz, Alexander Mertens, Lewis L. Chuang, Verena Nitsch
2024 C conf
HSI
Sabine Theis, Matthias Wille, Matthias G. Arend, Alexander Mertens, Verena Nitsch
2024 J jnl
Frontiers Artif. Intell.
Annette Kluge, Uta Wilkens, Verena Nitsch, Corinna Peifer
2024 J jnl
Multimodal Technol. Interact.
Apostolos Vrontos, Verena Nitsch, Christopher Brandl
2024 C conf
ISM
Jan-Phillip Herrmann, Sven Tackenberg, Florens L. Burgert, Verena Nitsch
2023 C conf
ISM
Nikolas J. Schierhorst, Laura Johnen, Christian Fimmers, Vincent Lohrmann, Josefine Monnet, Hanwen Zhang, Thomas Bergs, Christian Brecher, Alexander Mertens, Verena Nitsch
2023 conf
IEEM
Michael Kranz, Verena Nitsch, Susanne Mütze-Niewöhner
2023 J jnl
Int. J. Soc. Robotics
Benedikt Leichtmann, Johanna Hartung, Oliver Wilhelm, Verena Nitsch
2023 J jnl
IEEE Access
Jan-Phillip Herrmann, Sven Tackenberg, Verena Nitsch
2023 conf
HCI (29)
Minh Trinh, Hannah Dammers, Mohamed Behery, Ralph Baier, Thomas Henn, Daniel Gossen, Burkhard Corves, Stefan Kowalewski, Verena Nitsch, Gerhard Lakemeyer, Thomas Gries, Christian Brecher
2023 conf
IEEM
Maximilian Duisberg, Zoe Song, Verena Nitsch, Susanne Mütze-Niewöhner
2023 C conf
ISTAS
Sebastian Bernhard, Sebastian Pütz, Calvin Röhl, Ralph Baier, Philipp Brauner, Ester Christou, Hannah Dammers, Roman Flaig, Leon M. Gorißen, Jan-Christoph Heilinger, Christian Hinke, István Koren, Dirk Lüttgens, Michael Millan, Kai Müller, Alexander Schollemann, Luisa Vervier, Thomas Gries, Alexander Mertens, Saskia K. Nagel, Frank T. Piller, Günther Schuh, Martina Ziefle, Verena Nitsch, Carmen Leicht-Scholten
2023 conf
ICE/ITMC
Sebastian Pütz, Alexander Schollemann, Annika Laura Felter, Mirlinda Hajdari, Alexander Mertens, Seth Schmitz, Günther Schuh, Verena Nitsch
2023 conf
CHI Extended Abstracts
Sabine Theis, Carolin Stellmacher, Sebastian Pütz, Matthias G. Arend, Verena Nitsch
2023 J jnl
i-com
Christian Colceriu, Sabine Theis, Sigrid Brell-Cokcan, Verena Nitsch
2023 C conf
ISM
Florens L. Burgert, Matthäus Windhausen, Maximilian Kehder, Niklas Steireif, Susanne Mütze-Niewöhner, Verena Nitsch
2022 conf
HCI (2)
Ralph Baier, Hannah Dammers, Alexander Mertens, Mohamed Behery, Daniel Gossen, Srikanth Nouduri, Lukas Pelzer, Amir Shahidi, Minh Trinh, Christian Brecher, Burkhard Corves, Thomas Gries, Christian Hopmann, Mathias Hüsing, Gerhard Lakemeyer, Verena Nitsch
2022 J jnl
IEEE Trans Autom. Sci. Eng.
Valeria Villani, Lorenzo Sabattini, Giorgia Zanelli, Enrico Callegati, Benjamin Bezzi, Paulina Baranska, Zofia Mockallo, Dorota Zolnierczyk-Zreda, Julia N. Czerniak, Verena Nitsch, Alexander Mertens, Cesare Fantuzzi
2022 C conf
HSI
Sebastian Pütz, Ralph Baier, Philipp Brauner, Florian Brillowski, Hannah Dammers, Gian Luca Liehner, Alexander Mertens, Niklas Rodemann, Sebastian Schneider, Alexander Schollemann, Linda Steuer-Dankert, Luisa Vervier, Thomas Gries, Carmen Leicht-Scholten, Saskia K. Nagel, Frank T. Piller, Günther Schuh, Martina Ziefle, Verena Nitsch
2022 J jnl
Frontiers Robotics AI
Benedikt Leichtmann, Verena Nitsch, Martina Mara
2022 B conf
RO-MAN
Christian Colceriu, Benedikt Leichtmann, Sigrid Brell-Cokcan, Wolfgang Jonas, Verena Nitsch
2022 conf
HCI (19)
Alexander Mertens, Peter Rasche, Sabine Theis, Tobias Seinsch, Maximilian Boddin, Rebecca Küpper, Christina Bröhl, Matthias Wille, Axel Zweck, Christopher Brandl, Verena Nitsch, Katharina Schäfer
2022 conf
HCI (19)
Katharina Schäfer, Peter Rasche, Sabine Theis, Tobias Seinsch, Maximilian Boddin, Rebecca Küpper, Christina Bröhl, Matthias Wille, Axel Zweck, Christopher Brandl, Verena Nitsch, Alexander Mertens
2022 conf
Modellierung (Workshops)
Alexander Mertens, Philipp Brauner, Ralph Baier, Florian Brillowski, Hannah Dammers, Marc Van Dyck, Iris Kong, Peter Königs, Frauke Kordtomeikel, Gian Luca Liehner, Sebastian Pütz, Niklas Rodemann, Anne Kathrin Schaar, Linda Steuer-Dankert, Luisa Vervier, Shari Wlecke, Thomas Gries, Carmen Leicht-Scholten, Saskia K. Nagel, Frank T. Piller, Günther Schuh, Martina Ziefle, Verena Nitsch
2022 J jnl
ACM Trans. Hum. Robot Interact.
Benedikt Leichtmann, Albrecht Lottermoser, Julia Berger, Verena Nitsch
2022 C conf
HSI
Vera Barbara Rick, Christopher Brandl, Alexander Mertens, Verena Nitsch
2022 ch.
Selbstbestimmung, Privatheit und Datenschutz
Arvid Butting, Niël H. Conradie, Jutta Croll, Manuel Fehler, Clemens Gruber, Dominik Herrmann, Alexander Mertens, Judith Michael, Verena Nitsch, Saskia K. Nagel, Sebastian Pütz, Bernhard Rumpe, Elisabeth Schauermann, Johannes Schöning, Carolin Stellmacher, Sabine Theis
2022 conf
HCI (19)
Vera Barbara Rick, Peter Rasche, Alexander Mertens, Verena Nitsch
2021 conf
CHI Extended Abstracts
Vanessa Sauer, Alexander Mertens, Jens Heitland, Verena Nitsch
2021 C conf
HSI
Alexander Mertens, Sebastian Pütz, Philipp Brauner, Florian Brillowski, Nadine Buczak, Hannah Dammers, Marc Van Dyck, Iris Kong, Peter Königs, Frauke Kordtomeikel, Niklas Rodemann, Anne Kathrin Schaar, Linda Steuer-Dankert, Shari Wlecke, Thomas Gries, Carmen Leicht-Scholten, Saskia K. Nagel, Frank T. Piller, Günther Schuh, Martina Ziefle, Verena Nitsch
2021 J jnl
Int. J. Soc. Robotics
Benedikt Leichtmann, Verena Nitsch
2021 J jnl
IEEE Trans Autom. Sci. Eng.
Valeria Villani, Lorenzo Sabattini, Paulina Baranska, Enrico Callegati, Julia N. Czerniak, Adel Debbache, Mina Fahimi Pirehgalin, Andreas Gallasch, Frieder Loch, Rosario Maida, Alexander Mertens, Zofia Mockallo, Francesco Monica, Verena Nitsch, Engin Talas, Elisabetta Toschi, Birgit Vogel-Heuser, JeanMarc Willems, Dorota Zolnierczyk-Zreda, Cesare Fantuzzi
2020 conf
AHFE (16)
Philipp Brauner, Florian Brillowski, Hannah Dammers, Peter Königs, Frauke Kordtomeikel, Henning Petruck, Anne Kathrin Schaar, Seth Schmitz, Linda Steuer-Dankert, Alexander Mertens, Thomas Gries, Carmen Leicht-Scholten, Saskia K. Nagel, Verena Nitsch, Günther Schuh, Martina Ziefle
2020 J jnl
Sci. Eng. Ethics
Christopher Brandl, Matthias Wille, Jochen Nelles, Peter Rasche, Katharina Schäfer, Frank Ole Flemisch, Martin Frenz, Verena Nitsch, Alexander Mertens
2020 conf
HCI (28)
Christina Büsing, Sabrina Schmitz, Mariia Anapolska, Sabine Theis, Matthias Wille, Christopher Brandl, Verena Nitsch, Alexander Mertens
2020 conf
AHFE (15)
Laura Johnen, Alexander Mertens, Verena Nitsch, Christopher Brandl
2020 conf
IEEM
Christina Mayer, Susanne Mütze-Niewöhner, Verena Nitsch
2020 C conf
HSI
Jochen Nelles, Matthias G. Arend, Alexander Mertens, Anne Henschel, Christopher Brandl, Verena Nitsch
2020 conf
HCI (32)
Vanessa Sauer, Alexander Mertens, Alexander Heyden, Stefan Groß, Verena Nitsch
2020 conf
HCI (10)
Tobias Dreesbach, Alexander Mertens, Tobias Hellig, Matthias Pretzlaff, Verena Nitsch, Christopher Brandl
2020 conf
HCI (44)
Sabine Theis, Dajana Schäfer, Christina Haubrich, Christopher Brandl, Matthias Wille, Sonja A. Kotz, Verena Nitsch, Alexander Mertens
2020 conf
HCI (47)
Vanessa Sauer, Alexander Mertens, Madeleine Reiche, Christoph Mai, Jens Heitland, Verena Nitsch
2020 conf
HCI (27)
Peter Rasche, Moritz Richter, Katharina Schäfer, Sabine Theis, Verena Nitsch, Alexander Mertens
2020 conf
AHFE (13)
Oliver Brunner, Katharina Schäfer, Alexander Mertens, Verena Nitsch, Christopher Brandl
2020 conf
AHFE (17)
Julia N. Czerniak, Nikolas Schierhorst, Christopher Brandl, Alexander Mertens, Verena Nitsch
2020 conf
AHFE (15)
Christopher Brandl, Alexander Mertens, Verena Nitsch
2020 conf
HCI (34)
Thomas E. F. Witte, Jonas D. Hasbach, Jessica Schwarz, Verena Nitsch
2019 conf
AutomotiveUI (adjunct)
Vanessa Sauer, Alexander Mertens, Verena Nitsch, Jens Dietmar Reuschel
2019 conf
AutomotiveUI (adjunct)
Vanessa Sauer, Alexander Mertens, Stefan Groß, Verena Nitsch, Jens Heitland
2019 conf
MuC (Workshopband)
Tanja Döring, Karl-Heinz Hageni, Thomas Herrmann, Stephan Lutherdt, Verena Nitsch, Katrin Schilling, Matthias Vette-Steinkamp
2019 conf
AHFE (13)
Zavier Berti, Peter Rasche, Robert Chauvet, Matthias Wille, Vera Barbara Rick, Laura Barton, Tobias Hellig, Katharina Schäfer, Christina Bröhl, Sabine Theis, Christopher Brandl, Verena Nitsch, Alexander Mertens
2019 J jnl
Int. J. Soc. Robotics
Christina Bröhl, Jochen Nelles, Christopher Brandl, Alexander Mertens, Verena Nitsch
2019 conf
AHFE (11)
Henning Petruck, Jochen Nelles, Marco Faber, Heiner Giese, Marius Geibel, Stefan Mostert, Alexander Mertens, Christopher Brandl, Verena Nitsch
2019 J jnl
IEEE Robotics Autom. Lett.
Franz Steinmetz, Verena Nitsch, Freek Stulp
2019 conf
AHFE (6)
Robert Chauvet, Peter Rasche, Zavier Berti, Matthias Wille, Laura Barton, Katharina Schäfer, Christina Bröhl, Sabine Theis, Christopher Brandl, Verena Nitsch, Alexander Mertens
2019 J jnl
Int. J. Medical Informatics
Katharina Schäfer, Peter Rasche, Christina Bröhl, Sabine Theis, Laura Barton, Christopher Brandl, Matthias Wille, Verena Nitsch, Alexander Mertens
2019 conf
ICPS
Daniel Pause, Philipp Brauner, Marco Faber, Markus Fischer, Philipp Hünnekes, Henning Petruck, Alexander Mertens, Verena Nitsch, Günther Schuh, Volker Stich, Martina Ziefle
2018 conf
MuC (Workshopband)
Laura Johnen, Oliver Brunner, Tobias Hellig, Verena Nitsch, Alexander Mertens, Christopher Brandl
2018 conf
EuroHaptics (1)
Tobias Michael Benz, Verena Nitsch
2018 C conf
VEHITS
Matthias Graichen, Lisa Graichen, Thomas Rottmann, Verena Nitsch
2017 conf
ICCT
Gregor Behnke, Benedikt Leichtmann, Pascal Bercher, Daniel Höller, Verena Nitsch, Martin Baumann, Susanne Biundo
2017 B conf
RO-MAN
Friederike Eyssel, Ricarda Wullenkord, Verena Nitsch
2017 A* conf
ICRA
Tobias Michael Benz, Verena Nitsch
2016 J jnl
Biol. Cybern.
Thomas Glassen, Verena Nitsch
2015 conf
ITSC
Fabian Ruger, Verena Nitsch, Berthold Färber
2015 B conf
RO-MAN
Verena Nitsch, Thomas Glassen
2014 J jnl
Biol. Cybern.
Verena Nitsch, M. Popp
2013 J jnl
IEEE Trans. Haptics
Verena Nitsch, Berthold Färber
2012 conf
HAVE
Verena Nitsch, Berthold Färber, Anja Hellings, Stefan Jörg, Andreas Tobergte, Rainer Konietschke
2011 conf
HAVE
Christoph Staub, Salman Can, Alois C. Knoll, Verena Nitsch, Ines Karl, Berthold Färber
2011 conf
HAVE
Rahul Gopal Chaudhari, Clemens Schuwerk, Verena Nitsch, Eckehard G. Steinbach, Berthold Färber
2010 conf
EuroHaptics (1)
Verena Nitsch, Julius Kammerl, Berthold Färber, Eckehard G. Steinbach
2010 J jnl
Presence Teleoperators Virtual Environ.
Julius Kammerl, Iason Vittorias, Verena Nitsch, Berthold Färber, Eckehard G. Steinbach, Sandra Hirche
2010 J jnl
Presence Teleoperators Virtual Environ.
Marwan Radi, Andrea Reiter, Sherif Zaidan, Gunther Reinhart, Verena Nitsch, Berthold Färber
2009 conf
WHC
Carolina Weber, Verena Nitsch, Ulrich Unterhinninghofen, Berthold Färber, Martin Buss
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"