Na Lin

48 papers C 1Journal 30Unranked 17
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Trans. Sustain. Comput.
Zijia Zhao, Liang Zhao, Nan Wu, Lexi Xu, Na Lin, Zhiyuan Tan
2026 J jnl
IEEE Trans. Green Commun. Netw.
Na Lin, Zhihao Yang, Cunqian Yu, Ammar Hawbani, Zhi Liu, Liang Zhao
2026 J jnl
IEEE Trans. Green Commun. Netw.
Na Lin, Xia Wu, Ammar Hawbani, Ammar Muthanna, Liang Zhao
2025 J jnl
IEEE Trans. Mob. Comput.
Hui Qian, Hongmei Chai, Ammar Hawbani, Yuanguo Bi, Na Lin, Liang Zhao
2025 J jnl
IEEE Trans. Green Commun. Netw.
Na Lin, Tianxiong Wu, Liang Zhao, Ammar Hawbani, Shaohua Wan, Mohsen Guizani
2025 J jnl
IEEE Trans. Netw. Serv. Manag.
Na Lin, Xiao Han, Ammar Hawbani, Yunhe Sun, Yunchong Guan, Liang Zhao
2025 J jnl
IEEE Internet Things J.
Na Lin, Wenjia Zhang, Ammar Hawbani, Yunhe Sun, Tianxiong Wu, Ammar Muthanna, Saeed Hamood Alsamhi, Liang Zhao
2025 J jnl
IEEE Trans. Mob. Comput.
Na Lin, Cong Peng, Ammar Hawbani, Cunqian Yu, Yanbo Fan, Liang Zhao
2025 J jnl
IEEE Internet Things J.
Na Lin, Tianxiong Wu, Ammar Hawbani, Liang Zhao, Chunxiao Liu, Shaohua Wan, Mohsen Guizani
2025 J jnl
IEEE Internet Things J.
Na Lin, Chunxiao Liu, Tianxiong Wu, Ammar Hawbani, Liang Zhao, Shaohua Wan, Mohsen Guizani
2025 J jnl
IEEE Internet Things J.
Junling Shi, Guoyu Zhu, Hanyu Li, Ammar Hawbani, Jiehong Wu, Na Lin, Liang Zhao
2025 J jnl
IEEE Trans. Computers
Na Lin, Zhijiang Wang, Liang Zhao, Ammar Hawbani, Zhi Liu, Mohsen Guizani
2025 J jnl
IEEE Internet Things J.
Na Lin, Lei Zhang, Tianxiong Wu, Ammar Hawbani, Huiyu Zhou, Liang Zhao
2025 J jnl
IEEE Trans. Sustain. Comput.
Na Lin, Yamei Wang, Enchao Zhang, Shaohua Wan, Ahmed Al-Dubai, Liang Zhao
2024 J jnl
IEEE Internet Things J.
Na Lin, Lu Bai, Ammar Hawbani, Yunchong Guan, Chaojin Mao, Zhi Liu, Liang Zhao
2024 conf
ICT-DM
Liang Zhao, Zihang Gao, Ammar Hawbani, Wei Zhao, Chaojin Mao, Na Lin
2024 conf
ICIC (LNAI 5)
Junling Shi, Chunyu Li, Liang Zhao, Na Lin, Zhenguo Bi
2024 J jnl
Comput. Networks
Na Lin, Jinjiao Huang, Ammar Hawbani, Liang Zhao, Hailun Tang, Yunchong Guan, Yunhe Sun
2024 J jnl
IEEE Internet Things J.
Liang Zhao, Yuhang Liu, Ammar Hawbani, Na Lin, Wei Zhao, Keping Yu
2024 J jnl
CoRR
Xiguang Li, Jiafu Chen, Yunhe Sun, Na Lin, Ammar Hawbani, Liang Zhao
2023 conf
ISPA/BDCloud/SocialCom/SustainCom
Tianyu Li, Liang Zhao, Chaojin Mao, Na Lin, Qiang He, Xingwei Wang
2023 J jnl
IEEE Trans. Wirel. Commun.
Na Lin, Hailun Tang, Liang Zhao, Shaohua Wan, Ammar Hawbani, Mohsen Guizani
2023 J jnl
IEEE Trans. Veh. Technol.
Na Lin, Dewei Zhao, Liang Zhao, Ammar Hawbani, Mohsen Guizani, Neeraj Kumar
2023 conf
ISPA/BDCloud/SocialCom/SustainCom
Xin Shi, Liang Zhao, Na Lin, Lexi Xu, Ammar Hawbani, Yuanguo Bi
2023 J jnl
IEEE Netw. Lett.
Na Lin, Yamei Wang, Enchao Zhang, Keping Yu, Liang Zhao, Mohsen Guizani
2023 J jnl
IEEE Trans. Mob. Comput.
Na Lin, Yanbo Fan, Liang Zhao, Xiaoming Li, Mohsen Guizani
2023 conf
ISPA/BDCloud/SocialCom/SustainCom
Na Lin, Zhijiang Wang, Liang Zhao
2022 J jnl
Comput. Electr. Eng.
Na Lin, Luwei Fu, Liang Zhao, Ammar Hawbani, Zhiyuan Tan, Ahmed Al-Dubai, Geyong Min
2022 J jnl
IEEE Trans. Wirel. Commun.
Na Lin, Yuheng Liu, Liang Zhao, Dapeng Oliver Wu, Yifan Wang
2022 C conf
EUC
Enchao Zhang, Liang Zhao, Na Lin, Weijun Zhang, Ammar Hawbani, Geyong Min
2022 conf
CF
Na Lin, Hongzhi Qin, Junling Shi, Liang Zhao
2022 J jnl
IEEE Trans. Intell. Transp. Syst.
Liang Zhao, Hongxuan Li, Na Lin, Mingwei Lin, Chunlong Fan, Junling Shi
2021 J jnl
IEEE Internet Things J.
Na Lin, Qi Zhao, Liang Zhao, Ammar Hawbani, Lu Liu, Geyong Min
2021 conf
CSE
Zhenzhou Guo, Ding Feng, Changqing Gong, Han Qi, Na Lin, Xintong Li
2021 J jnl
IEEE Netw.
Junling Shi, Liang Zhao, Xingwei Wang, Mohsen Guizani, Haris Gacanin, Na Lin
2021 conf
CF
Na Lin, Qi Zhao, Liang Zhao
2021 J jnl
IEEE Trans. Ind. Informatics
Yunchong Guan, Liang Zhao, Jia Hu, Na Lin, Mohammed F. Alhamid
2020 J jnl
IEEE Trans. Wirel. Commun.
Na Lin, Luwei Fu, Liang Zhao, Geyong Min, Ahmed Al-Dubai, Haris Gacanin
2019 conf
HPCC/SmartCity/DSS
Na Lin, Feng Gao, Liang Zhao, Ahmed Al-Dubai, Zhiyuan Tan
2019 conf
TALE
Changqing Gong, Liang Zhao, Na Lin, Han Qi, Zhenzhou Guo, Xi-Huang Li
2019 conf
ISPA/BDCloud/SocialCom/SustainCom
Na Lin, Luwei Fu, Liang Zhao, Lu Liu, Geyong Min
2019 conf
HPCC/SmartCity/DSS
Chengcheng Wang, Xingjian Ma, Wenwen Jiang, Liang Zhao, Na Lin, Junling Shi
2018 conf
HPCC/SmartCity/DSS
Liang Zhao, Ahmed Abdulkadir, Xiaochun Tang, Na Lin, Cuiwei Liu, Jiajia Li
2018 conf
TALE
Liang Zhao, Yanju Dong, Zhaokui Li, Na Lin, Jiajia Li
2017 conf
5GWN
Xinsong Cheng, Liang Zhao, Na Lin, Changqing Gong, Ruiqing Wang
2017 conf
ICONIP (5)
Changqing Gong, Yun Xiao, Mengfei Li, Shou-Fei Han, Na Lin, Zhenzhou Guo
2017 conf
ICONIP (6)
Na Lin, Siming Huang, Changqing Gong, Liang Zhao, Jiacheng Tang
2013 J jnl
CoRR
Na Lin, Hong-Dong Liu, Chang-Qing Gong
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()