Ralph Kennel

124 papers B 1C 35Journal 62Unranked 26
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Trans. Ind. Electron.
Kunkun Zuo, Fengxiang Wang, Pinjia Zhang, Zhonggang Yin, Ralph Kennel
2025 J jnl
IEEE Trans. Ind. Electron.
Ibrahim Harbi, Hamza Makhamreh, Mostafa Ahmed, José Rodríguez, Ralph Kennel, Abdellah Kouzou, Mohamed Abdelrahem
2025 J jnl
IEEE Trans. Ind. Electron.
Lei Liu, Zhenbin Zhang, Yuxin Zhao, Guangze Chen, Haotian Xie, Yunfei Yin, Sergio Vazquez, Ralph Kennel
2025 J jnl
IEEE Trans. Ind. Electron.
Ali Sarajian, Quanxue Guan, Ibrahim Harbi, Peyman Haghgooei, Davood Arab Khaburi, Ralph Kennel, Patrick Wheeler, José R. Rodríguez
2025 J jnl
IEEE Trans. Ind. Electron.
Dehao Kong, Yongdu Wang, Zhenbin Zhang, José Rodríguez, Ralph Kennel, Marcelo Lobo Heldwein
2024 J jnl
IEEE Trans. Ind. Electron.
Mohammad Ali Hosseinzadeh, Maryam Sarebanzadeh, Cristian F. Garcia, Ebrahim Babaei, José Rodríguez, Ralph Kennel
2024 J jnl
IEEE Trans. Ind. Informatics
Lei Liu, Zhenbin Zhang, Yunfei Yin, Sergio Vazquez, Yuxin Zhao, Ralph Kennel
2024 C conf
IECON
Tohid Asefi, Ralph Kennel, Majid Sanatkar-Chayjani, S. Alireza Davari, Freddy Flores-Bahamonde
2024 J jnl
IEEE Trans. Ind. Electron.
Haotian Xie, Mateja Novak, Fengxiang Wang, Tomislav Dragicevic, José Rodríguez, Frede Blaabjerg, Ralph Kennel, Marcelo Lobo Heldwein
2024 conf
ISIE
Markus Kohler, Christian Herrera, Martin Gerngroß, Ralph Kennel, Christian Endisch
2024 J jnl
IEEE Trans. Ind. Electron.
Dehao Kong, Xiaonan Gao, Zhenbin Zhang, Chuang Liu, Marcelo Lobo Heldwein, Ralph Kennel
2024 J jnl
IEEE Trans. Ind. Informatics
Lei Liu, Yunfei Yin, Zhenbin Zhang, Haoyu Chen, Haotian Xie, Yanhua Liu, Yuxin Zhao, Ralph Kennel
2024 J jnl
IEEE Trans. Ind. Electron.
Qi Li, Haiming Li, Jianbo Gao, Yanliang Xu, José Rodríguez, Ralph Kennel
2024 J jnl
IEEE Trans. Ind. Electron.
Dongliang Ke, Fengxiang Wang, Xinhong Yu, S. Alireza Davari, Ralph Kennel
2023 J jnl
IEEE Trans. Ind. Informatics
Lei Liu, Zhenbin Zhang, Yunfei Yin, Yu Li, Haotian Xie, Mingyuan Zhang, Yuxin Zhao, Ralph Kennel
2023 J jnl
IEEE Trans. Ind. Electron.
Fengxiang Wang, Long He, Jinsong Kang, Ralph Kennel, José Rodríguez
2023 J jnl
IEEE Trans. Ind. Informatics
Qianwen Duan, Wei Tian, Qifan Yang, Xiaonan Gao, Yao Mao, Petros P. Karamanakos, Ralph Kennel, Marcelo Lobo Heldwein
2023 J jnl
IEEE Trans. Ind. Electron.
Yingjie He, Ying Tang, Xiaonan Gao, Haotian Xie, Fengxiang Wang, José Rodríguez, Ralph Kennel
2023 J jnl
IEEE Trans. Ind. Electron.
Hiroaki Kawai, Zhenbin Zhang, Ralph Kennel, Shinji Doki
2023 J jnl
IEEE Trans. Ind. Electron.
Xiaonan Gao, Yuebin Pang, Jinhui Xia, Na Chai, Wei Tian, José Rodríguez, Ralph Kennel
2022 C conf
IECON
Ali Sarajian, Quanxue Guan, Patrick Wheeler, Davood Arab Khaburi, Ralph Kennel, José Rodríguez
2022 J jnl
IEEE Trans. Ind. Electron.
Xinyue Li, Wei Tian, Xiaonan Gao, Qifan Yang, Ralph Kennel
2022 J jnl
IEEE Trans. Ind. Electron.
Haotian Xie, Fengxiang Wang, Qian Xun, Yingjie He, José Rodríguez, Ralph Kennel
2022 C conf
IECON
Maryam Sarebanzadeh, Mohammad Ali Hosseinzadeh, Cristian Garcia, Ebrahim Babaei, Alireza Jolfaei, José Rodríguez, Ralph Kennel
2022 C conf
IECON
Mohammad Ali Hosseinzadeh, Maryam Sarebanzadeh, Cristian Garcia, Ebrahim Babaei, Alireza Jolfaei, José Rodríguez, Ralph Kennel
2022 C conf
IECON
Ali Sarajian, Quanxue Guan, Patrick Wheeler, Davood Arab Khaburi, Ralph Kennel, José Rodríguez
2022 J jnl
IEEE Access
Ibrahim Harbi, Mostafa Ahmed, Marcelo Lobo Heldwein, Ralph Kennel, Mohamed Abdelrahem
2022 J jnl
IEEE Trans. Ind. Electron.
Haotian Xie, Lei Liu, Yingjie He, Fengxiang Wang, José Rodríguez, Ralph Kennel
2022 J jnl
Eur. J. Control
Issa Hammoud, Sebastian Hentzelt, Thimo Oehlschlägel, Ralph Kennel
2022 J jnl
Sensors
Mostafa Ahmed, Ibrahim Harbi, Ralph Kennel, José Rodríguez, Mohamed Abdelrahem
2022 J jnl
IEEE Access
Mostafa Ahmed, Ibrahim Harbi, Ralph Kennel, José Rodríguez, Mohamed Abdelrahem
2022 J jnl
IEEE Trans. Ind. Electron.
Xiaonan Gao, Wei Tian, Yuebin Pang, Ralph Kennel
2022 J jnl
Symmetry
Haotian Xie, Jianming Du, Dongliang Ke, Yingjie He, Fengxiang Wang, Christoph M. Hackl, José Rodríguez, Ralph Kennel
2022 J jnl
IEEE Trans. Ind. Electron.
Ying Tang, Yingjie He, Fengxiang Wang, Ralph Kennel
2021 J jnl
IEEE Trans. Ind. Electron.
Ying Tang, Yingjie He, Fengxiang Wang, Haotian Xie, José Rodríguez, Ralph Kennel
2021 C conf
IECON
Mohammed Azharuddin Shamshuddin, David Arancibia, Felix Rojas, Javier Pereda, Ralph Kennel
2021 conf
ICIT
Qing Chen, Qi Li, Peter Stolze, Ralph Kennel, Dierk Schröder
2021 J jnl
IEEE Trans. Ind. Electron.
Xinyue Li, Ralph Kennel
2021 conf
ICIT
Kai Cui, Hisham M. Eldeeb, Mohamed Abdelrahem, Ralph Kennel
2021 conf
ISIE
Johannes Hilverkus, Markus Märkl, Rainer Hagl, Ralph Kennel
2021 C conf
IECON
Hiroaki Kawai, Julien Cordier, Ralph Kennel, Shinji Doki
2020 J jnl
IEEE Trans. Ind. Electron.
Liming Yan, Fengxiang Wang, Manfeng Dou, Zhenbin Zhang, Ralph Kennel, José Rodríguez
2020 C conf
IECON
Mirza Abdul Waris Begh, Eyke Liegmann, Petros P. Karamanakos, Ralph Kennel
2020 C conf
IECON
Mohamed Abdelrahem, Ralph Kennel, Christoph M. Hackl, José Rodríguez
2020 C conf
IECON
Sebastian Wendel, Petros P. Karamanakos, Armin Dietz, Ralph Kennel
2020 C conf
IECON
Issa Hammoud, Sebastian Hentzelt, Thimo Oehlschlägel, Ralph Kennel
2020 conf
ISIE
Mostafa Ahmed, Mohamed Abdelrahem, Ralph Kennel, Christoph M. Hackl
2020 conf
ICIT
Martin Gerngroß, Markus Kohler, Christian Endisch, Ralph Kennel
2020 J jnl
J. Circuits Syst. Comput.
Fatemeh Abdi, Parviz Amiri, Mohammad Hosien Refan, Manfred Reddig, Ralph Kennel
2020 C conf
IECON
Ali Sarajian, Quanxue Guan, Patrick Wheeler, Davood Arab Khaburi, Ralph Kennel, Jose Rodriquez
2020 J jnl
IEEE Access
Genji Pei, Liyi Li, Xiaonan Gao, Jiaxi Liu, Ralph Kennel
2020 conf
ICIT
Yongdu Wang, Zhenbin Zhang, Cristian Garcia, José Rodríguez, Ralph Kennel
2020 conf
ISIE
Ahmed Farhan, Mohamed Abdelrahem, Amr Saleh, Adel Shaltout, Ralph Kennel
2020 C conf
IECON
Ibrahim Harbi, Mohamed Abdelrahem, Ralph Kennel, Christoph M. Hackl
2020 J jnl
IEEE Access
Chuang Liu, Dehao Kong, Zhenbin Zhang, Zhongchen Pei, Ralph Kennel
2020 conf
ICIT
Qing Chen, Haotian Xie, Ralph Kennel
2019 J jnl
IEEE Trans. Ind. Electron.
Felix Rojas, Roberto Cárdenas, Jon C. Clare, Matias Diaz, Javier Pereda, Ralph Kennel
2019 C conf
IECON
Qifan Yang, Eyke Liegmann, Petros P. Karamanakos, Ralph Kennel
2019 conf
SICE
Julia Höllthaler, Rainer Hagl, Ralph Kennel
2019 conf
ICIT
Matthias Laumann, Maarten J. Kamper, Christian Weiner, Ralph Kennel
2019 C conf
IECON
Mirza Abdul Waris Begh, Eyke Liegmann, Petros P. Karamanakos, Akshay Mahajan, Yam Prasad Siwakoti, Ralph Kennel
2019 J jnl
IEEE Access
Zhe Chen, Hang Zhang, Wencong Tu, Guangzhao Luo, Darshan Manoharan, Ralph Kennel
2018 J jnl
IEEE Trans. Ind. Electron.
Xinbo Cai, Can Wang, Ralph Kennel
2018 conf
EVER
Sebastian Wendel, Philipp Lohdefink, Michael Hoerner, Armin Dietz, Ralph Kennel
2018 C conf
IECON
Hiroaki Kawai, Zhenbin Zhang, Ralph Kennel
2018 C conf
IECON
Xicai Liu, Zhenbin Zhang, Xiaonan Gao, Zhixiong Li, Jin Wang, Libing Zhou, Ralph Kennel
2018 C conf
IECON
Xicai Liu, Jin Wang, Zhixiong Li, Hao Zuo, Libing Zhou, Ralph Kennel
2018 conf
ICIA
Xuezhu Mei, Ran Zu, Fengxiang Wang, Ralph Kennel
2017 C conf
IECON
Zhenbin Zhang, Kejun Cai, Ralph Kennel
2017 J jnl
IEEE Trans. Ind. Electron.
Fengxiang Wang, S. Alireza Davari, Zhe Chen, Zhenbin Zhang, Davood Arab Khaburi, José R. Rodríguez, Ralph Kennel
2017 conf
I2MTC
Hui Sun, Ji-Gou Liu, Ralph Kennel
2017 C conf
IECON
Zhenbin Zhang, Mahmoud T. Larijani, Wei Tian, Xiaonan Gao, José Rodríguez, Ralph Kennel
2017 J jnl
IEEE Trans. Ind. Electron.
Zhenbin Zhang, Hui Fang, Feng Gao, José Rodríguez, Ralph Kennel
2017 J jnl
IEEE Trans. Ind. Informatics
Zhenbin Zhang, Fengxiang Wang, Jun-Xiao Wang, José R. Rodríguez, Ralph Kennel
2016 J jnl
IEEE Trans. Control. Syst. Technol.
Petros P. Karamanakos, Tobias Geyer, Ralph Kennel
2016 J jnl
IEEE Trans. Ind. Electron.
James Zhenbin Zhang, Tongjing Sun, Fengxiang Wang, José Rodríguez, Ralph Kennel
2016 J jnl
IEEE Trans. Ind. Electron.
Males Tomlinson, Hendrik du T. Mouton, Ralph Kennel, Peter Stolze
2016 J jnl
IEEE Trans. Ind. Electron.
Guangzhao Luo, Rong Zhang, Zhe Chen, Wencong Tu, Sha Zhang, Ralph Kennel
2016 C conf
IECON
Xuezhu Mei, Fengxiang Wang, Ralph Kennel
2016 C conf
IECON
Xuezhu Mei, Fengxiang Wang, Ralph Kennel
2016 C conf
IAS
Marco Roetzer, Ulrich Vollmer, Ralph Kennel
2016 C conf
IECON
Ayman Ayad, Petros P. Karamanakos, Ralph Kennel
2016 C conf
IECON
Ayman Ayad, Mohamed Hashem, Christoph M. Hackl, Ralph Kennel
2016 J jnl
IEEE Trans. Ind. Informatics
Zhe Chen, Fengxiang Wang, Guangzhao Luo, Zhenbin Zhang, Ralph Kennel
2015 conf
CDC
Petros P. Karamanakos, Tobias Geyer, Ralph Kennel
2015 conf
ICIT
Abualkasim Bakeer, Mohamed A. Ismeil, Mohamed Orabi, Ralph Kennel
2015 J jnl
IEEE Trans. Veh. Technol.
Vesa Ruuskanen, Janne Nerg, Juha J. Pyrhönen, Sami Ruotsalainen, Ralph Kennel
2015 J jnl
Int. J. Control
Peter Stolze, Petros P. Karamanakos, Ralph Kennel, Stefanos N. Manias, Christian Endisch
2015 C conf
IECON
Zhenbin Zhang, Hui Fang, Ralph Kennel
2015 C conf
IECON
Zhenbin Zhang, Zhe Chen, Fengxiang Wang, Chun Wu, Ralph Kennel
2015 C conf
IECON
Zhe Chen, Zhenbin Zhang, Ralph Kennel, Guangzhao Luo
2015 J jnl
Int. J. Control
Fengxiang Wang, Zhenbin Zhang, Ralph Kennel, José Rodríguez
2015 J jnl
IEEE Trans. Ind. Electron.
Zhenbin Zhang, He Xu, Ming Xue, Zhe Chen, Tongjing Sun, Ralph Kennel, Christoph M. Hackl
2015 conf
ICIT
Ilias Alevras, Petros P. Karamanakos, Stefanos N. Manias, Ralph Kennel
2014 conf
ISIE
Males Tomlinson, Toit Mouton, Ralph Kennel, Peter Stolze
2014 J jnl
IEEE Trans. Ind. Electron.
Fengxiang Wang, Zhenbin Zhang, S. Alireza Davari, Reza Fotouhi, Davood Arab Khaburi, José Rodríguez, Ralph Kennel
2014 C conf
IECON
Reza Fotouhi, Lukas Leitner, Ralph Kennel, Hendrik du Toit Mouton
2014 J jnl
IEEE Trans. Ind. Informatics
Fengxiang Wang, Zhe Chen, Peter Stolze, Jean-Francois Stumper, José Rodríguez, Ralph Kennel
2014 J jnl
IEEE Trans. Ind. Informatics
Zhixun Ma, Saeid Saeidi, Ralph Kennel
2014 conf
ICCE-Berlin
Daniel Miller, Manfred Reddig, Ralph Kennel
2014 J jnl
IEEE Trans. Ind. Electron.
Zhe Chen, Jianbo Gao, Fengxiang Wang, Zhixun Ma, Zhenbin Zhang, Ralph Kennel
2013 C conf
IECON
Felix Rojas-Lobos, Ralph Kennel, Roberto Cárdenas-Dobson
2013 J jnl
IEEE Trans. Ind. Informatics
Zhixun Ma, Jianbo Gao, Ralph Kennel
2013 C conf
ACC
Jean-Francois Stumper, Veit Hagenmeyer, Sascha Kuehl, Ralph Kennel
2013 J jnl
IEEE Trans. Ind. Informatics
Daniël du Toit, Hendrik du T. Mouton, Ralph Kennel, Peter Stolze
2013 C conf
ACC
Jean-Francois Stumper, Ralph Kennel
2013 conf
AIM
Alexander Dötlinger, Ralph Kennel
2012 J jnl
CoRR
Jean-Francois Stumper, Alexander Dötlinger, Ralph Kennel
2012 J jnl
CoRR
Jean-Francois Stumper, Ralph Kennel
2012 J jnl
IEEE Trans. Ind. Electron.
José R. Rodríguez, Ralph Kennel, José R. Espinoza, Mauricio Trincado, César A. Silva, Christian A. Rojas
2012 J jnl
CoRR
Jean-Francois Stumper, Ralph Kennel
2012 C conf
CCA
Christoph M. Hackl, Ralph Kennel
2012 J jnl
CoRR
Jean-Francois Stumper, Alexander Doetlinger, Janos Jung, Ralph Kennel
2012 J jnl
CoRR
Jean-Francois Stumper, Ferdinand Svaricek, Ralph Kennel
2012 C conf
IECON
Seyed Alireza Davari, Davood Arab Khaburi, Ralph Kennel
2011 conf
CDC/ECC
Jean-Francois Stumper, Dirk Paulus, Ralph Kennel
2011 C conf
ACC
Jean-François Stumper, Ralph Kennel
2011 conf
CDC/ECC
Christoph M. Hackl, A. G. Hofmann, Ralph Kennel
2011 conf
AFRICON
Peter Stolze, Daniël du Toit, Males Tomlinson, Ralph Kennel, Toit Mouton
2011 conf
AFRICON
Peter Stolze, Daniël du Toit, Males Tomlinson, Ralph Kennel, Toit Mouton
2010 conf
CACSD
Jean-Francois Stumper, Ralph Kennel
2009 B conf
SMC
Christian Endisch, Peter Stolze, Peter Endisch, Christoph M. Hackl, Ralph Kennel
2009 conf
ECC
Jean-François Stumper, Ferdinand Svaricek, Ralph Kennel
2008 J jnl
IEEE Trans. Ind. Electron.
Patricio Cortes, Marian P. Kazmierkowski, Ralph Kennel, Daniel E. Quevedo, José R. Rodríguez
tests/scripts/test_macho_extractors_local.py
← Index tests/scripts/test_macho_extractors_local.py python
#!/usr/bin/env python3
"""
Local MachO extractors test - test actual extractors without server connections
"""

import sys
import os
import logging
import hashlib
from datetime import datetime, timezone
from typing import Dict, Any, Optional
from unittest.mock import Mock, patch

# Add the redb directory to the path so we can import the extractors
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'redb'))

# Mock settings to avoid database connections
with patch.dict('os.environ', {'REDB_ENV': 'test'}):
    # Import the actual extractors
    from redb.extractors.macho_extractors.macho_features import MachOFeaturesExtractor
    from redb.extractors.macho_extractors.macho_segments import MachOSegmentExtractor
    from redb.extractors.macho_extractors.macho_imports import MachOImportExtractor
    from redb.extractors.macho_extractors.macho_exports import MachOExportExtractor
    from redb.extractors.macho_extractors.macho_dylibs import MachODylibExtractor
    from redb.extractors.macho_extractors.macho_signature import MachOSignatureExtractor
    from redb.extractors.macho_extractors.macho_universal import MachOUniversalExtractor

def setup_logging():
    """Setup basic logging configuration."""
    logging.basicConfig(
        level=logging.INFO,
        format='%(asctime)s - %(levelname)s - %(message)s'
    )
    return logging.getLogger(__name__)

class MockLogger:
    """Mock logger for testing without RedB dependencies."""
    def __init__(self):
        self.logger = logging.getLogger(__name__)
    
    def debug(self, msg):
        self.logger.debug(msg)
    
    def info(self, msg):
        self.logger.info(msg)
    
    def warning(self, msg):
        self.logger.warning(msg)
    
    def error(self, msg):
        self.logger.error(msg)

class MockExporter:
    """Mock exporter that does nothing."""
    def export(self, data):
        pass

def create_mock_extractor(extractor_class, filepath):
    """Create an extractor instance with mocked dependencies."""
    log = MockLogger()
    
    # Mock the exporters to avoid database connections
    mock_exporters = [MockExporter()]
    
    # Create the extractor with mocked dependencies
    extractor = extractor_class(
        filepath=filepath,
        log=log,
        exporters=mock_exporters,
        index_prefix="test",
        elastic_index="test_macho",
        known_benign=False,
        known_malicious=False
    )
    
    return extractor

def test_extractor(extractor_class, filepath, extractor_name):
    """Test a specific extractor."""
    log = setup_logging()
    log.info(f"Testing {extractor_name}...")
    
    try:
        # Create the extractor with mocked dependencies
        extractor = create_mock_extractor(extractor_class, filepath)
        
        if not extractor.macho:
            log.error(f"{extractor_name}: No MachO object created")
            return False

        # Test the actual extract method
        result = extractor.extract()
        
        if result:
            log.info(f"{extractor_name}: Successfully extracted data")
            print(f"\n{'='*60}")
            print(f"=== {extractor_name.upper()} RESULTS ===")
            print(f"{'='*60}")
            
            if isinstance(result, list):
                print(f"📊 Extracted {len(result)} items")
                print()
                for i, item in enumerate(result):
                    print(f"📦 Item {i+1}:")
                    print(f"   {'─'*40}")
                    # Handle dataclass objects in lists
                    if hasattr(item, '__dataclass_fields__'):
                        from dataclasses import asdict
                        item_dict = asdict(item)
                        for key, value in item_dict.items():
                            if isinstance(value, (list, dict)):
                                if isinstance(value, list):
                                    print(f"   🔹 {key}: List with {len(value)} items")
                                    print(f"      {value}")
                                elif isinstance(value, dict):
                                    print(f"   🔹 {key}: Dict with {len(value)} keys")
                                    for k, v in value.items():
                                        print(f"      {k}: {v}")
                            else:
                                print(f"   🔹 {key}: {value}")
                    else:
                        # Regular dict
                        for key, value in item.items():
                            if isinstance(value, (list, dict)):
                                if isinstance(value, list):
                                    print(f"   🔹 {key}: List with {len(value)} items")
                                    print(f"      {value}")
                                elif isinstance(value, dict):
                                    print(f"   🔹 {key}: Dict with {len(value)} keys")
                                    for k, v in value.items():
                                        print(f"      {k}: {v}")
                            else:
                                print(f"   🔹 {key}: {value}")
                    print()
            else:
                print("📊 Extracted data:")
                print()
                # Handle dataclass objects
                if hasattr(result, '__dataclass_fields__'):
                    # It's a dataclass, use dataclasses.asdict
                    from dataclasses import asdict
                    result_dict = asdict(result)
                    for key, value in result_dict.items():
                        if isinstance(value, (list, dict)):
                            if isinstance(value, list):
                                print(f"🔹 {key}: List with {len(value)} items")
                                print(f"   {value}")
                            elif isinstance(value, dict):
                                print(f"🔹 {key}: Dict with {len(value)} keys")
                                for k, v in value.items():
                                    print(f"   {k}: {v}")
                        else:
                            print(f"🔹 {key}: {value}")
                        print()
                else:
                    # It's a regular dict
                    for key, value in result.items():
                        if isinstance(value, (list, dict)):
                            if isinstance(value, list):
                                print(f"🔹 {key}: List with {len(value)} items")
                                print(f"   {value}")
                            elif isinstance(value, dict):
                                print(f"🔹 {key}: Dict with {len(value)} keys")
                                for k, v in value.items():
                                    print(f"   {k}: {v}")
                        else:
                            print(f"🔹 {key}: {value}")
                        print()
        else:
            log.warning(f"{extractor_name}: No data extracted")
            print(f"\n❌ {extractor_name}: No data extracted")
        
        return True
        
    except Exception as e:
        log.error(f"{extractor_name}: Error during extraction: {e}")
        import traceback
        traceback.print_exc()
        return False

def main():
    """Main function."""
    if len(sys.argv) < 2:
        print("Usage: python test_macho_extractors_local.py <macho_file> [extractor_name]")
        print("\nAvailable extractors:")
        print("  features    - Basic MachO header and metadata")
        print("  segments    - Segment information and analysis")
        print("  imports     - Imported functions and libraries")
        print("  exports     - Exported symbols")
        print("  dylibs      - Dynamic library dependencies")
        print("  signature   - Code signing information")
        print("  universal   - FAT/Universal binary information")
        print("  all         - Test all extractors")
        sys.exit(1)
    
    filepath = sys.argv[1]
    extractor_name = sys.argv[2] if len(sys.argv) > 2 else "all"
    
    if not os.path.exists(filepath):
        print(f"File not found: {filepath}")
        sys.exit(1)
    
    # Define extractors
    extractors = {
        'features': (MachOFeaturesExtractor, "MachO Features"),
        'segments': (MachOSegmentExtractor, "MachO Segments"),
        'imports': (MachOImportExtractor, "MachO Imports"),
        'exports': (MachOExportExtractor, "MachO Exports"),
        'dylibs': (MachODylibExtractor, "MachO Dylibs"),
        'signature': (MachOSignatureExtractor, "MachO Code Signature"),
        'universal': (MachOUniversalExtractor, "MachO Universal/FAT"),
    }
    
    if extractor_name == "all":
        print(f"Testing all extractors with file: {filepath}")
        success_count = 0
        for name, (extractor_class, display_name) in extractors.items():
            if test_extractor(extractor_class, filepath, display_name):
                success_count += 1
            print("-" * 50)
        
        print(f"\n✅ {success_count}/{len(extractors)} extractors completed successfully")
        
    elif extractor_name in extractors:
        extractor_class, display_name = extractors[extractor_name]
        success = test_extractor(extractor_class, filepath, display_name)
        
        if success:
            print(f"\n✅ {display_name} testing completed successfully")
        else:
            print(f"\n❌ {display_name} testing failed")
            sys.exit(1)
    else:
        print(f"Unknown extractor: {extractor_name}")
        print("Available extractors:", ", ".join(extractors.keys()) + ", all")
        sys.exit(1)

if __name__ == "__main__":
    main()