Rahim Rahimi

13 papers Journal 9Unranked 3
YearRankTypeTitle / Venue / Authors
2025 J jnl
Comput. Electron. Agric.
Muhammad Masud Rana, Sarath Gopalakrishnan, Akshay Krishnakumar, Sotoudeh Sedaghat, Devendra Sarnaik, Amin Zareei, Michael Douglas Ruffatti, Spencer Hagaman, Jason Lehto, Ali Shakouri, Shalamar Armstrong, Rahim Rahimi
2024 J jnl
IEEE Trans. Biomed. Eng.
Sachin Kadian, Sarath Gopalakrishnan, Vidhya Selvamani, Sadid Khan, Trevor Meyer, Rithu Thomas, Muhammad Masud Rana, Pedro P. Irazoqui, Mohit S. Verma, Rahim Rahimi
2024 J jnl
IEEE Trans. Biomed. Eng.
Sarath Gopalakrishnan, Muhammad Masud Rana, Michael Anthony Curry, Akshay Krishnakumar, Rahim Rahimi
2023 J jnl
CoRR
Charilaos Mousoulis, Pengcheng Wang, Nguyen Luu Do, Jose Fernando Waimin, Nithin Raghunathan, Rahim Rahimi, Ali Shakouri, Saurabh Bagchi
2022 conf
IRPS
Bikram Kishore Mahajan, Yen-Pu Chen, Ulisses Alberto Heredia Rivera, Rahim Rahimi, Muhammad Ashraful Alam
2022 J jnl
IEEE Trans. Biomed. Eng.
Xin Jin, Ajanta Saha, Hongjie Jiang, Muhammed Ramazan Oduncu, Qingyu Yang, Sotoudeh Sedaghat, Kerry Maize, Jan P. Allebach, Ali Shakouri, Nicholas Glassmaker, Alexander Wei, Rahim Rahimi, Muhammad Ashraful Alam
2021 J jnl
IEEE Internet Things J.
S. R. Jino Ramson, Walter D. Leon-Salas, Zachary Brecheisen, Erika J. Foster, Cliff T. Johnston, Darrell G. Schulze, Timothy Filley, Rahim Rahimi, Martín Juan Carlos Villalta Soto, Juan A. Lopa Bolivar, Mauricio Postigo
2021 J jnl
IEEE Trans. Biomed. Eng.
Hongjie Jiang, Ian Woodhouse, Vidhya Selvamani, Jessica L. Ma, Renxiang Tang, Craig J. Goergen, Tahereh Soleimani, Rahim Rahimi
2019 conf
IEEE SENSORS
Hongjie Jiang, Wuyang Yu, Jose Fernando Waimin, Nicholas Glassmaker, Nithin Raghunathan, Xiaofan Jiang, Babak Ziaie, Rahim Rahimi
2019 conf
IEEE SENSORS
Xiaofan Jiang, Jose Fernando Waimin, Hongjie Jiang, Charilaos Mousoulis, Nithin Raghunathan, Rahim Rahimi, Dimitrios Peroulis
2017
Rahim Rahimi
2015 J jnl
IEEE Trans. Biomed. Eng.
Wuyang Yu, Rahim Rahimi, Manuel Ochoa, Rodolfo Pinal, Babak Ziaie
2015 J jnl
IEEE Access
Albert Kim, Manuel Ochoa, Rahim Rahimi, Babak Ziaie
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.")