Ian D. Watson

59 papers A* 4B 6C 11Misc 5Journal 15Unranked 14
YearRankTypeTitle / Venue / Authors
2025 conf
ICCBR Workshops
Michael W. Floyd, David Leake, David H. Ménager, Ian D. Watson, Kaitlynne Wilkerson
2016 C conf
ICCBR
Stefan Wender, Ian D. Watson
2015 C conf
INISTA
Glen Robertson, Ian D. Watson
2014 J jnl
AI Mag.
Glen Robertson, Ian D. Watson
2014 Misc conf
FLAIRS
Glen Robertson, Ian D. Watson
2014 C conf
ICCBR
Stefan Wender, Ian D. Watson
2014 B conf
PRICAI
Stefan Wender, Ian D. Watson
2013 conf
CIG
Kevin Norris, Ian D. Watson
2013 A* conf
IJCAI
Jonathan Rubin, Ian D. Watson
2013 conf
Australasian Conference on Artificial Intelligence
Jacky Shunjie Zhen, Ian D. Watson
2012 conf
CIG
Stefan Wender, Ian D. Watson
2012 Misc conf
IE
Glen Robertson, Ian D. Watson
2012 J jnl
AI Commun.
Jonathan Rubin, Ian D. Watson
2012 C conf
ICCBR
Jonathan Rubin, Ian D. Watson
2012 Misc conf
IE
Ian D. Watson, Jonathan Rubin, Glen Robertson
2012 book
Ian D. Watson
2011 J jnl
Artif. Intell.
Jonathan Rubin, Ian D. Watson
2011 A* conf
IJCAI
Jonathan Rubin, Ian D. Watson
2011 C conf
ICCBR
Alastair A. Abbott, Ian D. Watson
2011 C conf
ICCBR
Jonathan Rubin, Ian D. Watson
2010 C conf
ICCBR
Jonathan Rubin, Ian D. Watson
2009 conf
Australasian Conference on Artificial Intelligence
Jonathan Rubin, Ian D. Watson
2009 J jnl
Int. J. Intell. Games Simul.
Ian D. Watson, Jonathan Rubin
2008 conf
Australasian Conference on Artificial Intelligence
Ian D. Watson, Jonathan Rubin
2008 conf
CIG
Ian D. Watson, Song Lee, Jonathan Rubin, Stefan Wender
2008 B conf
PRICAI
Matthew Sheehan, Ian D. Watson
2008 conf
CIG
Stefan Wender, Ian D. Watson
2007 Misc conf
FLAIRS
Jonathan Rubin, Ian D. Watson
2006 conf
ECCBR
Ian D. Watson, Jens Trotzky
2005 J jnl
Knowl. Eng. Rev.
David W. Aha, Cindy Marling, Ian D. Watson
2005 J jnl
Knowl. Eng. Rev.
William Cheetham, Ian D. Watson
2005 J jnl
Knowl. Eng. Rev.
Ramón López de Mántaras, David McSherry, Derek G. Bridge, David B. Leake, Barry Smyth, Susan Craw, Boi Faltings, Mary Lou Maher, Michael T. Cox, Kenneth D. Forbus, Mark T. Keane, Agnar Aamodt, Ian D. Watson
2004 B conf
PRICAI
Anna Wills, Ian D. Watson
2004 B conf
KES
Shahin Maghsoudi, Ian D. Watson
2004 B conf
KES
Anna Wills, Ian D. Watson
2004 B conf
KES
Halah Hassan, Ian D. Watson
2003 J jnl
Empir. Softw. Eng.
Emilia Mendes, Ian D. Watson, Chris Triggs, Nile Mosley, Steve Counsell
2002 conf
IEEE METRICS
Emilia Mendes, Ian D. Watson, Chris Triggs, Nile Mosley, Steve Counsell
2002 A* conf
WWW
Emilia Mendes, Nile Mosley, Ian D. Watson
2002 Misc conf
FLAIRS
Ian D. Watson, Emilia Mendes, Chris Triggs, Nile Mosley, Steve Counsell
2001 C ed.
ICCBR
David W. Aha, Ian D. Watson
1999 A* conf
IJCAI
Ian D. Watson, Dan Gardingen
1999 J jnl
Knowl. Based Syst.
Dan Gardingen, Ian D. Watson
1999 J jnl
Knowl. Based Syst.
Ian D. Watson
1998 J jnl
Knowl. Based Syst.
Ian D. Watson, Srinath Perera
1998 J jnl
Knowl. Based Syst.
Ian D. Watson, Heather Watson
1998 conf
EWCBR
Ian D. Watson, Leonardo Oliveira
1997 book
Applying case-based reasoning - techniques for the enterprise systems.
Ian D. Watson
1997 J jnl
Artif. Intell. Eng. Des. Anal. Manuf.
Ian D. Watson, Srinath Perera
1997 C conf
ICCBR
Ian D. Watson, Srinath Perera
1995 conf
UK Workshop on Case-Based Reasoning
Ian D. Watson
1995 conf
UK Workshop on Case-Based Reasoning
Farhi Marir, Ian D. Watson
1995 conf
UK Workshop on Case-Based Reasoning
Srinath Perera, Ian D. Watson
1995 ed.
UK Workshop on Case-Based Reasoning
Ian D. Watson
1995 C conf
ICCBR
Farhi Marir, Ian D. Watson
1995 C conf
ICCBR
Mike Brown, Ian D. Watson, Nick Filer
1994 J jnl
Knowl. Eng. Rev.
Ian D. Watson, Farhi Marir
1994 J jnl
Knowl. Eng. Rev.
Farhi Marir, Ian D. Watson
1989
Ian D. Watson
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)