Olga Kouchnarenko

83 papers A* 1A 2B 6C 11Misc 1Journal 21Unranked 38
YearRankTypeTitle / Venue / Authors
2026 conf
Components Operationally: Reversibility and System Engineering: Essays Dedicated to Jean-Bernard Stefani on the Occasion of His 65th Birthday
Simon Bliudze, Sophie Cerf, Olga Kouchnarenko
2025 conf
WACA@DisCoTec
Anna Gallone, Simon Bliudze, Sophie Cerf, Olga Kouchnarenko
2024 conf
iThings/GreenCom/CPSCom/SmartData/Cybermatics
Frédéric Lassabe, Dominique Dhoutaut, Benoît Piranda, Olga Kouchnarenko, Julien Bourgeois
2024 B conf
SEFM
Salman Farhat, Simon Bliudze, Laurence Duchien, Olga Kouchnarenko
2023 C conf
COORDINATION
Salman Farhat, Simon Bliudze, Laurence Duchien, Olga Kouchnarenko
2022 J jnl
Autom. Control. Comput. Sci.
Frédéric Dadeau, Jean-Philippe Gros, Olga Kouchnarenko
2021 conf
FACS
Frédéric Dadeau, Jean-Philippe Gros, Olga Kouchnarenko
2020 J jnl
Softw. Qual. J.
Frédéric Dadeau, Jean-Philippe Gros, Olga Kouchnarenko
2019 J jnl
Sci. Comput. Program.
Olga Kouchnarenko, Eric Madelaine
2018 conf
TAP@STAF
Julien Bernard, Pierre-Cyrille Héam, Olga Kouchnarenko
2018 J jnl
CoRR
Julien Bernard, Pierre-Cyrille Héam, Olga Kouchnarenko
2018 J jnl
Int. J. Softw. Tools Technol. Transf.
Hadrien Bride, Olga Kouchnarenko, Fabien Peureux, Guillaume Voiron
2018 J jnl
Discret. Event Dyn. Syst.
Béatrice Bérard, Olga Kouchnarenko, John Mullins, Mathieu Sassolas
2018 J jnl
Program. Comput. Softw.
Jacques Julliand, Olga Kouchnarenko, Pierre-Alain Masson, Guillaume Voiron
2018 conf
TAP@STAF
Jacques Julliand, Olga Kouchnarenko, Pierre-Alain Masson, Guillaume Voiron
2017 conf
Ershov Informatics Conference
Jacques Julliand, Olga Kouchnarenko, Pierre-Alain Masson, Guillaume Voiron
2017 J jnl
Autom. Control. Comput. Sci.
Olga Kouchnarenko, Jean-François Weber
2017 ed.
FACS
Olga Kouchnarenko, Ramtin Khosravi
2017 B conf
VMCAI
Hadrien Bride, Olga Kouchnarenko, Fabien Peureux
2017 J jnl
Inf. Process. Lett.
Pierre-Cyrille Héam, Vincent Hugot, Olga Kouchnarenko
2017 Misc conf
TASE
Jacques Julliand, Olga Kouchnarenko, Pierre-Alain Masson, Guillaume Voiron
2016 conf
WODES
Béatrice Bérard, Olga Kouchnarenko, John Mullins, Mathieu Sassolas
2016 conf
FMICS-AVoCS
Hadrien Bride, Olga Kouchnarenko, Fabien Peureux, Guillaume Voiron
2015 J jnl
Sci. Comput. Program.
Elena Tushkanova, Alain Giorgetti, Christophe Ringeissen, Olga Kouchnarenko
2015 conf
Ershov Memorial Conference
Hadrien Bride, Olga Kouchnarenko, Fabien Peureux
2015 C conf
ICFEM
Olga Kouchnarenko, Jean-François Weber
2015 J jnl
CoRR
Béatrice Bérard, Olga Kouchnarenko, John Mullins, Mathieu Sassolas
2014 J jnl
Softw. Test. Verification Reliab.
Aloïs Dreyfus, Pierre-Cyrille Héam, Olga Kouchnarenko, Catherine Masson
2014 conf
FESCA
Arnaud Lanoix, Olga Kouchnarenko
2014 conf
FACS
Olga Kouchnarenko, Jean-François Weber
2014 J jnl
CoRR
Pierre-Cyrille Héam, Vincent Hugot, Olga Kouchnarenko
2014 B conf
IFM
Hadrien Bride, Olga Kouchnarenko, Fabien Peureux
2013 conf
FACS
Olga Kouchnarenko, Jean-François Weber
2013 conf
RTA
Elena Tushkanova, Christophe Ringeissen, Alain Giorgetti, Olga Kouchnarenko
2013 C conf
CIAA
Aloïs Dreyfus, Pierre-Cyrille Héam, Olga Kouchnarenko
2013 J jnl
CoRR
Aloïs Dreyfus, Pierre-Cyrille Héam, Olga Kouchnarenko
2013 conf
ICST Workshops
Aloïs Dreyfus, Pierre-Cyrille Héam, Olga Kouchnarenko
2013 J jnl
CoRR
Aloïs Dreyfus, Pierre-Cyrille Héam, Olga Kouchnarenko
2012 conf
WRLA
Elena Tushkanova, Alain Giorgetti, Christophe Ringeissen, Olga Kouchnarenko
2012 A conf
IJCAR
Pierre-Cyrille Héam, Vincent Hugot, Olga Kouchnarenko
2012 J jnl
Theor. Comput. Sci.
Pierre-Cyrille Héam, Vincent Hugot, Olga Kouchnarenko
2012 C conf
CIAA
Pierre-Cyrille Héam, Vincent Hugot, Olga Kouchnarenko
2012 A conf
SC
Arnaud Lanoix, Olga Kouchnarenko, Samuel Colin, Vincent Poirriez
2012 B conf
FM
Julien Dormoy, Olga Kouchnarenko, Arnaud Lanoix
2011 conf
FESCA@ETAPS
Arnaud Lanoix, Julien Dormoy, Olga Kouchnarenko
2011 C conf
CIAA
Pierre-Cyrille Héam, Vincent Hugot, Olga Kouchnarenko
2011 conf
FACS
Julien Dormoy, Olga Kouchnarenko, Arnaud Lanoix
2010 J jnl
Sci. Comput. Program.
Pierre-Cyrille Héam, Olga Kouchnarenko, Jérôme Voinot
2010 C conf
AICCSA
Julien Dormoy, Olga Kouchnarenko
2010 conf
ICST Workshops
Pierre-Cyrille Héam, Vincent Hugot, Olga Kouchnarenko
2010 conf
LDTA
Alain Giorgetti, Claude Marché, Elena Tushkanova, Olga Kouchnarenko
2010 conf
FACS
Julien Dormoy, Olga Kouchnarenko, Arnaud Lanoix
2009 conf
FACS@FMWeek
Philippe Balbiani, Fahima Cheikh Alili, Pierre-Cyrille Héam, Olga Kouchnarenko
2009 J jnl
Int. J. Found. Comput. Sci.
Yohan Boichut, Roméo Courbis, Pierre-Cyrille Héam, Olga Kouchnarenko
2009 conf
RP
Yohan Boichut, Pierre-Cyrille Héam, Olga Kouchnarenko
2009 C conf
CIAA
Roméo Courbis, Pierre-Cyrille Héam, Olga Kouchnarenko
2009 conf
INFINITY
Yohan Boichut, Pierre-Cyrille Héam, Olga Kouchnarenko
2008 J jnl
Nord. J. Comput.
Yohan Boichut, Pierre-Cyrille Héam, Olga Kouchnarenko
2008 conf
FACS
Pierre-Cyrille Héam, Olga Kouchnarenko, Jérôme Voinot
2008 conf
RTA
Yohan Boichut, Roméo Courbis, Pierre-Cyrille Héam, Olga Kouchnarenko
2008 conf
RP
Yohan Boichut, Roméo Courbis, Pierre-Cyrille Héam, Olga Kouchnarenko
2008 conf
AMAST
Samuel Colin, Arnaud Lanoix, Olga Kouchnarenko, Jeanine Souquières
2008 C conf
FMICS
Samuel Colin, Arnaud Lanoix, Olga Kouchnarenko, Jeanine Souquières
2008 J jnl
IET Softw.
Alain Giorgetti, Julien Groslambert, Jacques Julliand, Olga Kouchnarenko
2007 C conf
WETICE
Pierre-Cyrille Héam, Olga Kouchnarenko, Jérôme Voinot
2006 ed.
B
Jacques Julliand, Olga Kouchnarenko
2006 C conf
ICTAC
Yohan Boichut, Pierre-Cyrille Héam, Olga Kouchnarenko
2006 conf
Ershov Memorial Conference
Olga Kouchnarenko, Arnaud Lanoix
2006 conf
SAVCBS@FSE
Julien Groslambert, Jacques Julliand, Olga Kouchnarenko
2005 A* conf
CAV
Alessandro Armando, David A. Basin, Yohan Boichut, Yannick Chevalier, Luca Compagna, Jorge Cuéllar, Paul Hankes Drielsma, Pierre-Cyrille Héam, Olga Kouchnarenko, Jacopo Mantovani, Sebastian Mödersheim, David von Oheimb, Michaël Rusinowitch, Judson Santiago, Mathieu Turuani, Luca Viganò, Laurent Vigneron
2004 conf
AMAST
Olga Kouchnarenko, Arnaud Lanoix
2003 C conf
MEMOCODE
Françoise Bellegarde, Celina Charlet, Olga Kouchnarenko
2003 conf
ZB
Christophe Darlot, Jacques Julliand, Olga Kouchnarenko
2003 conf
FME
Olga Kouchnarenko, Arnaud Lanoix
2002 conf
FASec
Frédéric Oehl, Gérard Cécé, Olga Kouchnarenko, David Sinclair
2002 J jnl
Tech. Sci. Informatiques
Françoise Bellegarde, Celina Charlet, Olga Kouchnarenko
2002 conf
ZB
Françoise Bellegarde, Jacques Julliand, Olga Kouchnarenko
2001 conf
FME
Françoise Bellegarde, Christophe Darlot, Jacques Julliand, Olga Kouchnarenko
2000 B conf
FASE
Françoise Bellegarde, Jacques Julliand, Olga Kouchnarenko
2000 conf
ZB
Françoise Bellegarde, Christophe Darlot, Jacques Julliand, Olga Kouchnarenko
1997 B conf
PaCT
Olga Kouchnarenko, Philippe Schnoebelen
1997
Olga Kouchnarenko
1996 conf
INFINITY
Olga Kouchnarenko, Philippe Schnoebelen
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()