Haiyan Tu

23 papers B 2C 1Journal 15Unranked 5
YearRankTypeTitle / Venue / Authors
2026 J jnl
IEEE Trans. Veh. Technol.
Haiyan Tu, Paolo Bellavista, Liqiang Zhao, Kai Liang, Gan Zheng, Kai-Kit Wong
2026 J jnl
Swarm Evol. Comput.
Haiyan Tu, Chunli Wang, Jiawei Pan, Xiujuan Zheng
2025 J jnl
Pattern Recognit. Lett.
Xiujuan Zheng, Binghang Zou, Chang Zhang, Haiyan Tu
2024 J jnl
IEEE Internet Things J.
Haiyan Tu, Liqiang Zhao, Yaoyuan Zhang, Gan Zheng, Chen Feng, Shenghui Song, Kai Liang
2024 J jnl
Robotics Auton. Syst.
Haiyan Tu, Yizhao Deng, Qiyang Li, Mingjun Song, Xiujuan Zheng
2024 J jnl
IEEE Internet Things J.
Haiyan Tu, Paolo Bellavista, Liqiang Zhao, Gan Zheng, Kai Liang, Kai-Kit Wong
2023 J jnl
Sensors
Hao Liu, Haiyan Tu, Shan Huang, Xiujuan Zheng
2023 conf
VTC2023-Spring
Chang Qin, Tao Sun, Mengtian Liu, Bingjie Zhu, Yunfeng Wang, Haiyan Tu, Manhua Zhu, Liqiang Zhao
2023 J jnl
Sensors
Shang Tian, Haiyan Tu, Ling He, Yue Ivan Wu, Xiujuan Zheng
2023 J jnl
Sensors
Wen Yan, Haiyan Tu, Peng Qin, Tao Zhao
2022 conf
VTC Spring
Yinxin Li, Haiyan Tu, Guorong Zhou, Ting Li, Yunfeng Wang, Kai Liang, Zhigang Wang, Liqiang Zhao
2022 B conf
PIMRC
Yuyang Wang, Liqiang Zhao, Haiyan Tu, Guorong Zhou, Qingyu Yin
2022 conf
VTC Spring
Huixian Gu, Weiwen Cai, Liqiang Zhao, Weimin Luo, Guorong Zhou, Qiming Chen, Haiyan Tu, Zhigang Wang, Shuchun Li
2022 B conf
PIMRC
Manhua Zhu, Xuefei Duan, Haiyan Tu, Yunfeng Wang, Guorong Zhou, Xianmei Jin, Liqiang Zhao
2022 conf
SoSE
Zihan Zhou, Yunchuan Liu, Haiyan Tu, Mengyao Han, Qiuhua Zen
2022 J jnl
IEEE Trans. Syst. Man Cybern. Syst.
Yicheng Liu, Wen Yan, Tao Zhang, Chunxiao Yu, Haiyan Tu
2022 J jnl
Robotica
Wen Yan, Yicheng Liu, Qijie Lan, Tao Zhang, Haiyan Tu
2021 J jnl
IEEE Trans. Veh. Technol.
Haiyan Tu, Liqiang Zhao, Chen Feng, Cheng Guo
2020 C conf
IECON
Yicheng Liu, Wen Yan, Chunxiao Yu, Tao Zhang, Haiyan Tu
2019 J jnl
CoRR
Ruisen Luo, Tao Hu, Zuodong Tang, Chen Wang, Xiaofeng Gong, Haiyan Tu
2018 J jnl
IEEE Access
Ruisen Luo, Qian Feng, Chen Wang, Xiaomei Yang, Haiyan Tu, Qin Yu, Shaomin Fei, Xiaofeng Gong
2018 J jnl
J. Control. Sci. Eng.
Yicheng Liu, Junhui Ma, Haiyan Tu
2013 conf
ICDIP
Zhenmin Zhu, Yongxian Zhang, Haiyan Tu, Xiaolong Jin
redb/extractors/decompiler/_archive/ghidra-test.py
← Index redb/extractors/decompiler/_archive/ghidra-test.py python
import subprocess
import json
import os
import tempfile
import uuid
import shutil
import sys
import time


def run_command(cmd, env=None):
    try:
        print(f"Starting command: {' '.join(cmd)}")
        start_time = time.time()
        process = subprocess.Popen(
            cmd, env=env, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True
        )

        while True:
            output = process.stdout.readline()
            if output:
                print(output.strip())
            if process.poll() is not None:
                break

        stdout, stderr = process.communicate()
        end_time = time.time()

        print(f"Command finished. Execution time: {end_time - start_time:.2f} seconds")
        print(f"Return code: {process.returncode}")

        if process.returncode != 0:
            print(f"Error output:\n{stderr}")
            return None
        return stdout
    except Exception as e:
        print(f"Error running command {' '.join(cmd)}: {e}")
        return None


def analyze_binary(ghidra_path, binary_path, java_script_path):
    print(f"Ghidra path: {ghidra_path}")
    print(f"Binary path: {binary_path}")
    print(f"Java script path: {java_script_path}")

    # Check if Java script exists
    if not os.path.exists(java_script_path):
        print(f"Error: Java script not found at {java_script_path}")
        return None

    # Set up environment variables
    env = os.environ.copy()
    java_home = "/usr/lib/jvm/java-17-openjdk-amd64"  # Adjust this path if needed
    env["JAVA_HOME"] = java_home
    env["PATH"] = f"{java_home}/bin:{env['PATH']}"
    env["LD_LIBRARY_PATH"] = f"{java_home}/lib:{env.get('LD_LIBRARY_PATH', '')}"

    # Print environment variables for debugging
    print(f"JAVA_HOME: {env['JAVA_HOME']}")
    print(f"PATH: {env['PATH']}")
    print(f"LD_LIBRARY_PATH: {env['LD_LIBRARY_PATH']}")

    # Check Ghidra installation
    analyzeHeadless_path = f"{ghidra_path}/support/analyzeHeadless"
    print(f"analyzeHeadless exists: {os.path.exists(analyzeHeadless_path)}")

    print(f"Binary file exists: {os.path.exists(binary_path)}")

    # Check Java
    java_version = run_command(["java", "-version"], env=env)
    print(f"Java version: {java_version}")

    # Create a temporary project directory
    project_path = tempfile.gettempdir() + "/ghidra_" + str(uuid.uuid4())
    os.makedirs(project_path, exist_ok=True)
    print(f"Created temporary project path: {project_path}")
    output_file = ""

    try:
        # Run Ghidra's headless analyzer
        analyze_cmd = [
            analyzeHeadless_path,
            project_path,
            "TempProject",
            "-import",
            binary_path,
            "-postScript",
            java_script_path,
            "-deleteProject",
        ]

        result = run_command(analyze_cmd, env=env)
        if result is None:
            return None

        # Read the output JSON file
        output_file = "ghidra_output.json"
        if os.path.exists(output_file):
            with open(output_file, "r") as f:
                functions = json.load(f)
            return functions
        else:
            print(
                f"Output file {output_file} not found. Ghidra analysis may have failed."
            )
            # List files in the current directory
            print("Files in the current directory:")
            print("\n".join(os.listdir(".")))
            return None
    finally:
        # Clean up
        if os.path.exists(output_file):
            os.remove(output_file)
        if os.path.exists(project_path):
            shutil.rmtree(project_path)


# Example usage
if __name__ == "__main__":
    # if len(sys.argv) != 4:
    #     print("Usage: python script.py <ghidra_path> <binary_path> <java_script_path>")
    #     sys.exit(1)

    # ghidra_path = sys.argv[1]
    # binary_path = sys.argv[2]
    # java_script_path = sys.argv[3]

    ghidra_path = "/opt/ghidra"
    binary_path = "/home/p4c0/dev/redb/test_files/hello"
    java_script_path = (
        "/opt/ghidra/Ghidra/Features/Base/ghidra_scripts/GhidraDecompilerScript.java"
    )

    functions = analyze_binary(ghidra_path, binary_path, java_script_path)

    if functions:
        print(f"Extracted functions from {binary_path}:")
        for func in functions:
            print(f"\nFunction: {func['name']}")
            print(f"Address: {func['address']}")
            print(f"Decompiled code:\n{func['decompiled']}")
    else:
        print("Failed to extract functions.")