Rahul Kumar Verma

17 papers C 1Journal 13Unranked 3
YearRankTypeTitle / Venue / Authors
2025 J jnl
J. Supercomput.
Rahul Kumar Verma, Shubhra Jain, Abhinesh Kaushik
2024 J jnl
ACM Comput. Surv.
Shubhra Jain, Rahul Kumar Verma
2024 J jnl
J. Supercomput.
Aman Mehta, Rahul Kumar Verma
2023 J jnl
J. Ambient Intell. Humaniz. Comput.
Rahul Kumar Verma, Shubhra Jain
2022 J jnl
J. Supercomput.
Shubhra Jain, Rahul Kumar Verma, K. K. Pattanaik, Anupam Shukla
2021 J jnl
J. Supercomput.
Shubhra Jain, Kiran Kumar Pattanaik, Rahul Kumar Verma, Anupam Shukla
2021 J jnl
IEEE Internet Things J.
Shubhra Jain, K. K. Pattanaik, Rahul Kumar Verma, Sourabh Bharti, Anupam Shukla
2021 J jnl
J. Supercomput.
Shubhra Jain, Kiran Kumar Pattanaik, Rahul Kumar Verma, Anupam Shukla
2021 J jnl
Wirel. Networks
Shushant Kumar Jain, M. Venkatadari, Neeraj Shrivastava, Shubhra Jain, Rahul Kumar Verma
2020 J jnl
ACM Trans. Sens. Networks
Rahul Kumar Verma, K. K. Pattanaik, Sourabh Bharti, Divya Saxena, Jiannong Cao
2020 J jnl
CoRR
Rahul Kumar Verma, K. K. Pattanaik, P. B. R. Dissanayake, A. J. Dammika, H. A. D. Samith Buddika, Mosbeh R. Kaloop
2020 J jnl
Telecommun. Syst.
Rahul Kumar Verma, K. K. Pattanaik, Sourabh Bharti
2019 J jnl
J. Netw. Comput. Appl.
Rahul Kumar Verma, K. K. Pattanaik, Sourabh Bharti, Divya Saxena
2019 C conf
TENCON
Shubhra Jain, K. K. Pattanaik, Rahul Kumar Verma, Anupam Shukla
2018 conf
IEEE SENSORS
Rahul Kumar Verma, Sourabh Bharti, Kiran Kumar Pattanaik
2015 conf
ICIIS
Rahul Kumar Verma, K. K. Pattanaik, Sourabh Bharti
2015 conf
ICIIS
Mithilesh Kumar, K. K. Pattanaik, Brijendra Yadav, Rahul Kumar Verma
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.")