Wei Wang

39 papers Journal 28Unranked 11
YearRankTypeTitle / Venue / Authors
2025 J jnl
Appl. Intell.
Tingting Han, Ruqian Liu, Shuwei Dou, Wei Wang, Xiaoming Ding, Wenxia Zhang, Jihao Lang, Wenxuan Li, Jixing Han
2017 J jnl
EURASIP J. Wirel. Commun. Netw.
Baoju Zhang, Cuiping Zhang, Jiasong Mu, Wei Wang, Jiazu Xie
2017 J jnl
Ad Hoc Networks
Wei Wang, Dan Wang, Yu Jiang
2016 J jnl
Signal Process.
Wei Wang, Baoju Zhang, Dan Wang, Yu Jiang, Shan Qin, Lei Xue
2016 J jnl
Secur. Commun. Networks
Ji Wu, Wei Wang, Qilian Liang, Xiaorong Wu, Baoju Zhang
2016 J jnl
Signal Process.
Baoju Zhang, Shan Qin, Wei Wang, Dan Wang, Lei Xue
2016 J jnl
EURASIP J. Wirel. Commun. Netw.
Baoju Zhang, Lei Xue, Wei Wang, Shan Qin, Dan Wang
2015 J jnl
Secur. Commun. Networks
Wei Wang, Xin Zhou, Baoju Zhang, Jiasong Mu
2015 J jnl
Secur. Commun. Networks
Baoju Zhang, Qing Lei, Wei Wang, Jiasong Mu
2015 J jnl
Secur. Commun. Networks
Xin Wang, Qilian Liang, Jiasong Mu, Wei Wang, Baoju Zhang
2015 J jnl
Int. J. Data Min. Bioinform.
Shuo Li, James O. Nyagilo, Digant P. Dave, Wei Wang, Baoju Zhang, Jean Gao
2015 J jnl
Int. J. Sens. Networks
Jiasong Mu, Wei Song, Wei Wang, Baoju Zhang
2015 J jnl
Int. J. Distributed Sens. Networks
Wei Wang, Shan Qin
2015 J jnl
Secur. Commun. Networks
Zhuo Li, Qilian Liang, Jiasong Mu, Wei Wang, Baoju Zhang
2014 J jnl
EURASIP J. Wirel. Commun. Netw.
Jiasong Mu, Wei Wang, Baoju Zhang, Wei Song
2014 J jnl
EURASIP J. Wirel. Commun. Netw.
Xin Zhou, Wei Wang, Ruian Liu
2014 J jnl
Wirel. Commun. Mob. Comput.
Ji Wu, Wei Wang, Qilian Liang, Xiaorong Wu, Baoju Zhang
2014 J jnl
EURASIP J. Adv. Signal Process.
Wei Wang, Dunqiang Lu, Ying Wang, Qinghua Chen, Baoju Zhang
2014 J jnl
EURASIP J. Wirel. Commun. Netw.
Liang Han, Jiasong Mu, Wei Wang, Baoju Zhang
2014 J jnl
Wirel. Commun. Mob. Comput.
Baoju Zhang, Wei Wang, Ruijuan Wang
2014 J jnl
EURASIP J. Adv. Signal Process.
Wei Wang, Zhangliang Chen, Jiasong Mu, Tingting Han
2013 conf
ICC Workshops
Qing Lei, Baoju Zhang, Wei Wang, Jiasong Mu, Xiaorong Wu
2013 J jnl
EURASIP J. Wirel. Commun. Netw.
Xin Zhou, Xin Yin, Ruian Liu, Wei Wang
2013 J jnl
Int. J. Sens. Networks
Jiasong Mu, Baoju Zhang, Wei Wang
2013 J jnl
EURASIP J. Wirel. Commun. Netw.
Wei Wang, Dunqiang Lu, Xin Zhou, Baoju Zhang, Jiasong Mu
2013 J jnl
EURASIP J. Wirel. Commun. Netw.
Baoju Zhang, Xiang Tong, Wei Wang, Jiazu Xie
2013 conf
ICC Workshops
Wei Wang, Baoju Zhang, Jiasong Mu
2013 J jnl
EURASIP J. Wirel. Commun. Netw.
Baoju Zhang, Wei Wang
2012 J jnl
EURASIP J. Wirel. Commun. Netw.
Wei Wang, Baoju Zhang
2012 conf
ICC
Wei Wang, Baoju Zhang
2012 J jnl
EURASIP J. Wirel. Commun. Netw.
Wei Wang, Baoju Zhang, Jiasong Mu
2012 conf
GLOBECOM Workshops
Jiasong Mu, Baoju Zhang, Wei Wang
2012 conf
GLOBECOM Workshops
Qing Lei, Baoju Zhang, Wei Wang
2012 conf
ICC
Baoju Zhang, Xiaohui Yin, Wei Wang, Qing Lei
2012 conf
GLOBECOM Workshops
Wei Wang, Baoju Zhang, Jiasong Mu, Xiaorong Wu
2011 conf
ISCIT
Zhuo Li, Qilian Liang, Wei Wang, Baoju Zhang
2011 conf
ISCIT
Zhou Feng, Wei Wang, Ran Guo
2011 conf
ISCIT
Junjie Chen, Jing Liang, Qilian Liang, Wei Wang, Baoju Zhang
2011 conf
CHINACOM
Baoju Zhang, Wei Wang, Ruijuan 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.")