Xianghan Wang

19 papers A 1Journal 15Unranked 3
YearRankTypeTitle / Venue / Authors
2026 J jnl
Int. J. Mach. Learn. Cybern.
Xianghan Wang, Zhigang Yu, Li Zeng, Jun Zhang, Jincai Huang
2025 J jnl
Sci. China Inf. Sci.
Xianghan Wang, Jianghua Zhong, Dongdai Lin
2025 J jnl
Neurocomputing
Zihao Li, Xiaofei Li, Jiaxin Yang, Xianghan Wang, Shuohao Li, Jun Zhang
2025 J jnl
CoRR
Rui Xi, Xianghan Wang
2025 J jnl
J. Syst. Sci. Complex.
Xianghan Wang, Jianghua Zhong, Dongdai Lin
2025 J jnl
Sci. Robotics
Guorui Li, Peng Shen, Tuck-Whye Wong, Mingyu Liu, Zhenxiang Sun, Xinyu Liu, Yongzai Chen, Xianghan Wang, Hao Zhang, Bingxu Hu, Deli Chen, Zhihan Zhang, Chao Zhang, Rongchen Wang, Wenhao Zhang, Shuai Nie, Xinyue Zhang, Jie-Wei Wong, Haofei Zhou, Wenbo Li, Hao Wang, Qian Zhang, Shenlong Wang, Zhiwen Yu, Hai Li, Hongyu Zhao, Qingyun Zeng, Shiping Wang, Zhilong Huang, Cong Ye, A-Man Zhang, Tiefeng Li
2025 J jnl
CoRR
Xianghan Wang, Chingshuan Hsiao, Shimei Qiu
2025 conf
AALTD@ECML/PKDD
Tao Wang, Runhao Zhao, Jiuyang Tang, Xianghan Wang, Xiaolu Liu, Sijie He
2025 A conf
CIKM
Zhigang Yu, Hao Yan, Ruochen Liu, Xianghan Wang, Haijun Zhang, Senzhang Wang
2025 J jnl
CoRR
Xianghan Wang
2025 J jnl
Inf. Process. Manag.
Zihao Li, Jiaxin Yang, Xianghan Wang, Jun Lei, Shuohao Li, Jun Zhang
2024 J jnl
Complex Syst. Model. Simul.
Jinyuan Mo, Xianghan Wang, Shengjun Huang, Rui Wang
2024 conf
iThings/GreenCom/CPSCom/SmartData/Cybermatics
Haoxiang Cheng, Shixuan Liu, Changjun Fan, Kuihua Huang, Hua He, Xianghan Wang, Zhong Liu
2024 J jnl
IEEE Internet Things J.
Sidan Yang, Yishan Su, Xianghan Wang, Rong Fan
2023 J jnl
IACR Cryptol. ePrint Arch.
Xianghan Wang, Jianghua Zhong, Dongdai Lin
2023 J jnl
Int. J. Pattern Recognit. Artif. Intell.
Bo Tan, Zhuohong Pan, Xuefang Tong, Yan Wang, Xianghan Wang, Lei Gao
2022 J jnl
Inf. Sci.
Yong Zhao, Bin Chen, Xianghan Wang, Zhengqiu Zhu, Yiduo Wang, Guangquan Cheng, Rui Wang, Rongxiao Wang, Ming He, Yu Liu
2021 J jnl
Sensors
Yang Liu, Jie Jiang, Jiahao Sun, Xianghan Wang
2018 conf
DSC
Yingmei Wei, Xiaolei Du, Dalin Xu, Xianghan Wang
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.")