Rajender Parsad

16 papers Journal 16
YearRankTypeTitle / Venue / Authors
2025 J jnl
Commun. Stat. Simul. Comput.
Vinayaka, Rajender Parsad, Baidya Nath Mandal
2024 J jnl
Comput. Biol. Chem.
Upendra Kumar Pradhan, Prasanjit Behera, Ritwika Das, Sanchita Naha, Ajit Gupta, Rajender Parsad, Sukanta Kumar Pradhan, Prabina Kumar Meher
2024 J jnl
IEEE Access
Samarth Godara, Jatin Bedi, Rajender Parsad, Deepak Singh, Ram Swaroop Bana, Sudeep Marwaha
2024 J jnl
IEEE Access
Samarth Godara, G. Avinash, Rajender Parsad, Sudeep Marwaha, Mukhtar Ahmad Faiz, Ram Swaroop Bana
2024 J jnl
IEEE Access
Samarth Godara, Geeta Sikka, Rajender Parsad, Sudeep Marwaha, Mukhtar Ahmad Faiz, Ram Swaroop Bana
2023 J jnl
Eng. Appl. Artif. Intell.
Samarth Godara, Durga Toshniwal, Ram Swaroop Bana, Deepak Singh, Jatin Bedi, Rajender Parsad, Jai Prakash Singh Dabas, Abimanyu Jhajhria, Shruti Godara, Raju Kumar, Sudeep Marwaha
2023 J jnl
Briefings Bioinform.
Upendra Kumar Pradhan, Prabina Kumar Meher, Sanchita Naha, Soumen Pal, Ajit Gupta, Rajender Parsad
2022 J jnl
Comput. Electron. Agric.
Samarth Godara, Durga Toshniwal, Rajender Parsad, Ram Swaroop Bana, Deepak Singh, Jatin Bedi, Abimanyu Jhajhria, Jai Prakash Singh Dabas, Sudeep Marwaha
2021 J jnl
J. Open Source Softw.
Pratheesh P. Gopinath, Rajender Parsad, Brigit Joseph, Adarsh S.
2020 J jnl
Commun. Stat. Simul. Comput.
Baidya Nath Mandal, Rajender Parsad, Sukanta Dash
2018 J jnl
Commun. Stat. Simul. Comput.
Pratheesh P. Gopinath, Rajender Parsad, Baidya Nath Mandal
2012 J jnl
Model. Assist. Stat. Appl.
Krishan Lal, Rajender Parsad, V. K. Gupta
2008 J jnl
Model. Assist. Stat. Appl.
Baidya Nath Mandal, Rajender Parsad, V. K. Gupta, U. C. Sud
2007 J jnl
Ars Comb.
Rajender Parsad, Sanpei Kageyama, V. K. Gupta
2004 J jnl
Ars Comb.
Subrata Kumar Satpati, Rajender Parsad
2001 J jnl
Ars Comb.
Rajender Parsad, V. K. Gupta
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.")