Vikas Aggarwal

19 papers A 3C 3Journal 6Unranked 7
YearRankTypeTitle / Venue / Authors
2020 C conf
ISCAS
Vikas Aggarwal, Ritabrata Bhattacharya, Taranjit Kukal, Sankaran Aniruddhan
2019 conf
MWSCAS
Vikas Aggarwal, Ritabrata Bhattacharya, Ashish Gupta, Taranjit Kukal, Sankaran Aniruddhan
2019 J jnl
IEEE Trans. Circuits Syst. II Express Briefs
Ritabrata Bhattacharya, Vikas Aggarwal, Ashish Gupta, Taranjit Kukal, Sankaran Aniruddhan
2019 conf
ICACDS (2)
Vikas Aggarwal, Anjali Singhal
2019 conf
5G World Forum
Ritabrata Bhattacharya, Vikas Aggarwal, Ashish Gupta, Surender Singh, Taranjit Kukal, Ian Dennison, Sankaran Aniruddhan
2015 J jnl
Concurr. Comput. Pract. Exp.
Bryant C. Lam, Alan D. George, Herman Lam, Vikas Aggarwal
2012 J jnl
ACM Trans. Reconfigurable Technol. Syst.
Vikas Aggarwal, Greg Stitt, Alan D. George, Changil Yoon
2011 J jnl
IEEE Des. Test Comput.
Greg Stitt, Alan D. George, Herman Lam, Melissa C. Smith, Vikas Aggarwal, Gongyu Wang, Casey Reardon, Brian Holland, Seth Koehler, James Coole
2011 J jnl
ACM Trans. Reconfigurable Technol. Syst.
Vikas Aggarwal, Alan D. George, Changil Yoon, Kishore Yalamanchili, Herman Lam
2010 conf
PGAS
Vikas Aggarwal, Changil Yoon, Alan D. George, Herman Lam, Greg Stitt
2009 conf
HPRCTA@SC
Vikas Aggarwal, Alan D. George, Kishore Yalamanchili, Changil Yoon, Herman Lam, Greg Stitt
2009 A conf
IPDPS
Vikas Aggarwal, Yogish Sabharwal, Rahul Garg, Philip Heidelberger
2009 conf
HPRCTA@SC
Vikas Aggarwal, Rafael García, Greg Stitt, Alan D. George, Herman Lam
2006 conf
ERSA
Brian Holland, James Greco, Ian A. Troxel, Gabe Barfield, Vikas Aggarwal, Alan D. George
2006 A conf
ESA
Rajagopal Subramaniyan, Vikas Aggarwal, Adam Jacobs, Alan D. George
2006 A conf
FPGA
Vikas Aggarwal, Alan D. George, K. Clint Slatton
2004 C conf
IGARSS
Vikas Aggarwal, Karthik Nagarajan, K. Clint Slatton
2000 C conf
CIAA
Priti Shankar, K. Sasidharan, Vikas Aggarwal, B. Sundar Rajan
1991 J jnl
RFC
Vikas Aggarwal
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)