Ioannis Karamitsos

30 papers B 4Journal 10Unranked 16
YearRankTypeTitle / Venue / Authors
2025 conf
AIAI Workshops (2)
Nikolaos Roufas, Alaa Mohasseb, Ioannis Karamitsos, Andreas Kanavos
2025 conf
SEEDA-CECNSM
Markos Koltsidas, Ioannis Karamitsos, Andreas Kanavos
2025 B conf
IEEE Big Data
Nikolaos Roufas, Athanasios Kanavos, Ioannis Karamitsos, Khalil Al-Hussaeni, Manolis Maragoudakis
2025 conf
AIAI Workshops (2)
Orestis Papadimitriou, Khalil Al-Hussaeni, Ioannis Karamitsos, Manolis Maragoudakis
2025 B conf
IEEE Big Data
Ioannis Karamitsos, Theofanis Aravanis, Andreas Kanavos
2025 J jnl
Frontiers Artif. Intell.
Ioannis Karamitsos, Nikolaos Roufas, Khalil Al-Hussaeni, Athanasios Kanavos
2025 J jnl
Int. J. Artif. Intell. Tools
Orestis Papadimitriou, Athanasios Kanavos, Manolis Maragoudakis, Ioannis Karamitsos
2025 conf
AIAI (3)
Anfal Albloushi, Ioannis Karamitsos, Andreas Kanavos, Sanjay Modak
2025 conf
AIAI Workshops (2)
Athanasios Kanavos, Ioannis Karamitsos, Manolis Maragoudakis
2024 B conf
IEEE Big Data
Athanasios Kanavos, Orestis Papadimitriou, Khalil Al-Hussaeni, Ioannis Karamitsos, Manolis Maragoudakis
2024 conf
EMCIS (2)
Annwesha Banerjee Majumder, Somsubhra Gupta, Dharmpal Singh, Biswaranjan Acharya, Vassilis C. Gerogiannis, Andreas Kanavos, Ioannis Karamitsos
2024 J jnl
Inf.
Anum Faraz, Fardin Ahsan, Jinane Mounsef, Ioannis Karamitsos, Andreas Kanavos
2024 B conf
IEEE Big Data
Andreas Kanavos, Gerasimos Vonitsanos, Ioannis Karamitsos, Khalil Al-Hussaeni
2024 conf
AIAI (Workshops)
Tariq Najr, Chrissie Aldo, Ioannis Karamitsos, Andreas Kanavos, Sanjay Modak
2024 conf
AIAI (Workshops)
Marwa Alghawi, Jinane Mounsef, Ioannis Karamitsos
2024 J jnl
Comput.
Athanasios Kanavos, Orestis Papadimitriou, Khalil Al-Hussaeni, Manolis Maragoudakis, Ioannis Karamitsos
2023 conf
SMAP
Andreas Kanavos, Nikos Antonopoulos, Ioannis Karamitsos, Phivos Mylonas
2023 conf
IISA
Andreas Kanavos, Ioannis Karamitsos, Alaa Mohasseb, Vassilis C. Gerogiannis
2023 J jnl
Comput.
Andreas Kanavos, Ioannis Karamitsos, Alaa Mohasseb
2023 J jnl
Sensors
Cheena Mohanty, Sakuntala Mahapatra, Biswaranjan Acharya, Fotis Kokkoras, Vassilis C. Gerogiannis, Ioannis Karamitsos, Andreas Kanavos
2023 conf
EMCIS (2)
Manoj Kumar Srivastav, Somsubhra Gupta, V. M. Priyadharshini, Subhranil Som, Biswaranjan Acharya, Vassilis C. Gerogiannis, Andreas Kanavos, Ioannis Karamitsos
2022 conf
SMAP
Ioannis Karamitsos, Alaa Mohasseb, Andreas Kanavos
2022 conf
EMCIS
Khalil Al-Hussaeni, Jarryd Brits, Meghna Praveen, Afra Yaqoob, Ioannis Karamitsos
2021 conf
MMBD/MLIS
Ioannis Karamitsos, Maria Papadaki
2021 J jnl
Inf. Technol. Dev.
Maria Papadaki, Ioannis Karamitsos
2021 J jnl
J. Enterp. Inf. Manag.
Maria Papadaki, Ioannis Karamitsos, Marinos Themistocleous
2020 J jnl
Inf.
Ioannis Karamitsos, Saeed Albarhami, Charalampos Apostolopoulos
2013 conf
WOCN
Ioannis Karamitsos, Charalampos Apostolopoulos
2010 J jnl
J. Softw. Eng. Appl.
Ioannis Karamitsos, Charalampos Apostolopoulos, Moteb Al Bugami
2008 conf
ICSNC
Ioannis Karamitsos, Katerina Vagelatou, Gianna Koliopanou
tests/scripts/test_linking.py
← Index tests/scripts/test_linking.py python
#!/usr/bin/env python3
"""
Test script to verify the linking between decompiled and disassembled functions.
"""

import sys
import os
from pathlib import Path

# Add the redb directory to the path
sys.path.insert(0, str(Path(__file__).parent / "redb"))

from redb.extractors.decompiler.DecompileBinja import DecompileBinja
import logging

def test_linking():
    """Test that decompiled and disassembled functions are properly linked."""
    
    # Setup logging
    logging.basicConfig(level=logging.INFO)
    logger = logging.getLogger("test_linking")
    
    # Use a simple test binary (you'll need to provide a path to a test binary)
    test_binary = "test_files/hello"  # Adjust this path as needed
    
    if not os.path.exists(test_binary):
        print(f"Test binary not found: {test_binary}")
        print("Please provide a valid binary path for testing")
        return False
    
    try:
        # Create and run the extractor
        with DecompileBinja(test_binary, logger) as extractor:
            success = extractor.extract()
            
            if not success:
                print("Extraction failed")
                return False
            
            # Get the analysis results
            results = extractor.analysis_results
            
            if not results:
                print("No analysis results")
                return False
            
            print(f"Analysis completed successfully")
            print(f"Decompiled functions: {len(results['decompiled'])}")
            print(f"Disassembled functions: {len(results['disassembled'])}")
            
            # Test linking
            linking_issues = []
            linked_pairs = 0
            decompiled_only = 0
            disassembled_only = 0
            
            # Check decompiled functions have proper linking
            for decomp_func in results['decompiled']:
                decomp_hash = decomp_func.get('decompiled_function_hash')
                disasm_hash = decomp_func.get('disassembled_function_hash')
                
                if disasm_hash is None:
                    decompiled_only += 1
                    print(f"⚠️  Decompiled function {decomp_func.get('decompiled_function_name')} has no disassembled link (decompiled-only)")
                else:
                    linked_pairs += 1
                    print(f"✓ Decompiled function {decomp_func.get('decompiled_function_name')} linked to disassembled hash: {disasm_hash[:16]}...")
            
            # Check disassembled functions have proper linking
            for disasm_func in results['disassembled']:
                disasm_hash = disasm_func.get('disassembled_function_hash')
                decomp_hash = disasm_func.get('decompiled_function_hash')
                
                if decomp_hash is None:
                    disassembled_only += 1
                    print(f"⚠️  Disassembled function {disasm_func.get('disassembled_function_name')} has no decompiled link (disassembled-only)")
                else:
                    print(f"✓ Disassembled function {disasm_func.get('disassembled_function_name')} linked to decompiled hash: {decomp_hash[:16]}...")
            
            # Verify cross-references are consistent
            decompiled_hashes = {f['decompiled_function_hash']: f for f in results['decompiled']}
            disassembled_hashes = {f['disassembled_function_hash']: f for f in results['disassembled']}
            
            for decomp_func in results['decompiled']:
                decomp_hash = decomp_func.get('decompiled_function_hash')
                disasm_hash = decomp_func.get('disassembled_function_hash')
                
                if disasm_hash and disasm_hash in disassembled_hashes:
                    corresponding_disasm = disassembled_hashes[disasm_hash]
                    if corresponding_disasm.get('decompiled_function_hash') != decomp_hash:
                        linking_issues.append(f"Inconsistent linking: decompiled {decomp_hash[:16]}... -> disassembled {disasm_hash[:16]}... but reverse link doesn't match")
            
            # Summary
            print(f"\n📊 Linking Summary:")
            print(f"  - Linked function pairs: {linked_pairs}")
            print(f"  - Decompiled-only functions: {decompiled_only}")
            print(f"  - Disassembled-only functions: {disassembled_only}")
            print(f"  - Total functions processed: {len(results['decompiled']) + len(results['disassembled'])}")
            
            if linking_issues:
                print(f"\n❌ Linking issues found:")
                for issue in linking_issues:
                    print(f"  - {issue}")
                return False
            else:
                print(f"\n✅ All linking tests passed!")
                print(f"✅ Cross-references are consistent!")
                return True
                
    except Exception as e:
        print(f"Test failed with exception: {e}")
        return False

if __name__ == "__main__":
    success = test_linking()
    sys.exit(0 if success else 1)