Neng Zhang

30 papers A* 3A 2Journal 20Unranked 5
YearRankTypeTitle / Venue / Authors
2026 J jnl
ACM Trans. Softw. Eng. Methodol.
Shuaiyu Xie, Jian Wang, Hanbin He, Zhihao Wang, Yuqi Zhao, Neng Zhang, Bing Li
2026 J jnl
Expert Syst. Appl.
Zhixiang Chen, Anji Li, Neng Zhang, Jianguo Chen, Yuan Huang, Zibin Zheng
2025 J jnl
Expert Syst. Appl.
Zheng Lin, Neng Zhang, Chao Liu, Zibin Zheng
2025 J jnl
Proc. ACM Softw. Eng.
Anji Li, Neng Zhang, Ying Zou, Zhixiang Chen, Jian Wang, Zibin Zheng
2025 J jnl
ACM Trans. Softw. Eng. Methodol.
Siyu Nan, Jian Wang, Neng Zhang, Duantengchuan Li, Bing Li
2024 A conf
SANER
Chao Liu, Xuanlin Bao, Hongyu Zhang, Neng Zhang, Haibo Hu, Xiaohong Zhang, Meng Yan
2024 J jnl
Proc. ACM Softw. Eng.
Xiangping Chen, Furen Xu, Yuan Huang, Neng Zhang, Zibin Zheng
2024 A conf
ISSTA
Peilin Zheng, Bowei Su, Xiapu Luo, Ting Chen, Neng Zhang, Zibin Zheng
2024 J jnl
CoRR
Yuhan Zhu, Jian Wang, Bing Li, Xuxian Tang, Hao Li, Neng Zhang, Yuqi Zhao
2024 J jnl
CoRR
Shuaiyu Xie, Jian Wang, Hanbin He, Zhihao Wang, Yuqi Zhao, Neng Zhang, Bing Li
2024 conf
Internetware
Xiaoqi Yue, Chao Liu, Neng Zhang, Haibo Hu, Xiaohong Zhang
2024 J jnl
CoRR
Zhixiang Chen, Anji Li, Neng Zhang, Jianguo Chen, Yuan Huang, Zibin Zheng
2023 J jnl
CoRR
Chao Liu, Xuanlin Bao, Hongyu Zhang, Neng Zhang, Haibo Hu, Xiaohong Zhang, Meng Yan
2023 conf
ICSE Companion
Zhongqi Chen, Neng Zhang, Pengyue Si, Qinde Chen, Chao Liu, Zibin Zheng
2023 A* conf
ICSE
Zibin Zheng, Neng Zhang, Jianzhong Su, Zhijie Zhong, Mingxi Ye, Jiachi Chen
2023 J jnl
CoRR
Zibin Zheng, Neng Zhang, Jianzhong Su, Zhijie Zhong, Mingxi Ye, Jiachi Chen
2023 J jnl
IEEE Trans. Software Eng.
Neng Zhang, Ying Zou, Xin Xia, Qiao Huang, David Lo, Shanping Li
2023 A* conf
ASE
Neng Zhang, Qinde Chen, Zibin Zheng, Ying Zou
2022 J jnl
IEEE Trans. Software Eng.
Neng Zhang, Qiao Huang, Xin Xia, Ying Zou, David Lo, Zhenchang Xing
2022 A* conf
ICSE
Neng Zhang, Chao Liu, Xin Xia, Christoph Treude, Ying Zou, David Lo, Zibin Zheng
2021 J jnl
Expert Syst. Appl.
Bin Tang, Meng Yan, Neng Zhang, Ling Xu, Xiaohong Zhang, Haijun Ren
2020 J jnl
IEEE Trans. Serv. Comput.
Neng Zhang, Jian Wang, Yutao Ma
2019 J jnl
Expert Syst. Appl.
Fang Xie, Jian Wang, Ruibin Xiong, Neng Zhang, Yutao Ma, Keqing He
2019 J jnl
Knowl. Inf. Syst.
Neng Zhang, Jian Wang, Keqing He, Zheng Li, Yiwang Huang
2018 J jnl
Expert Syst. Appl.
Ruibin Xiong, Jian Wang, Neng Zhang, Yutao Ma
2018 J jnl
J. Syst. Softw.
Neng Zhang, Jian Wang, Yutao Ma, Keqing He, Zheng Li, Xiaoqing (Frank) Liu
2016 conf
SCC
Neng Zhang, Jian Wang, Keqing He, Zheng Li
2014 conf
IEEE SCC
Jingliang Chen, Keqing He, Yutao Ma, Neng Zhang
2013 conf
IEEE SCC
Jian Wang, Neng Zhang, Cheng Zeng, Zheng Li, Keqing He
2012 J jnl
Int. J. Web Serv. Res.
Jia Zhang, Jian Wang, Patrick C. K. Hung, Zheng Li, Neng Zhang, Keqing He
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.")