Raju Shrestha

56 papers B 3C 7Misc 3Journal 9Unranked 34
YearRankTypeTitle / Venue / Authors
2025 conf
FLLM
Raju Shrestha, Nikhil Amatya
2025 conf
CSAI
Zara Mudassar, Raju Shrestha
2025 conf
ICCBDC
Raju Shrestha, Fatema Tuz Sabiha
2025 conf
EUSIPCO
Frencis Balla, Raju Shrestha
2024 conf
PETRA
Ifunanya Barbara Onyekwelu, Raju Shrestha, Frode Eika Sandnes
2024 conf
MIPR
Raju Shrestha, Hanne Korneliussen
2024 J jnl
IEEE Trans. Commun.
Daniel Romero, Pham Q. Viet, Raju Shrestha
2024 conf
VTC Spring
Daniel Romero, Tien Ngoc Ha, Raju Shrestha, Massimo Franceschetti
2024 Misc conf
UCC
Raju Shrestha, Ali Abdi Nur Ali
2024 B conf
IC2E
Raju Shrestha, Akash Ray
2024 conf
ICITL (2)
Ananta Devkota, Shashank Gupta, Raju Shrestha, Frode Eika Sandnes
2024 J jnl
IEEE Trans. Wirel. Commun.
Daniel Romero, Tien Ngoc Ha, Raju Shrestha, Massimo Franceschetti
2023 C conf
CLOSER
Raju Shrestha, Tahzeena Tandel
2023 J jnl
CoRR
Daniel Romero, Tien Ngoc Ha, Raju Shrestha, Massimo Franceschetti
2023 J jnl
Expert Syst. Appl.
Bineeth Kuriakose, Raju Shrestha, Frode Eika Sandnes
2023 conf
CHItaly
Bineeth Kuriakose, Raju Shrestha, Frode Eika Sandnes
2023 conf
SmartCloud
Raju Shrestha, Beebu Nisha
2023 J jnl
CoRR
Raju Shrestha, Tien Ngoc Ha, Pham Q. Viet, Daniel Romero
2023 conf
ICCPR
Håkon Guttulsrud, Mathias Sandnes, Raju Shrestha
2023 J jnl
IEEE Trans. Wirel. Commun.
Raju Shrestha, Daniel Romero, Sundeep Prabhakar Chepuri
2022 Misc conf
ICMLC
Raju Shrestha
2022 conf
HCI (8)
Bineeth Kuriakose, Raju Shrestha, Frode Eika Sandnes
2022 Misc conf
UCC
Raju Shrestha, Beebu Nisha
2022 conf
IHAW
Bineeth Kuriakose, Irina Cosescu, Raju Shrestha, Frode Eika Sandnes
2022 J jnl
CoRR
Raju Shrestha, Daniel Romero, Sundeep Prabhakar Chepuri
2021 conf
AICCC
Raju Shrestha
2021 conf
IntelliSys (2)
Bineeth Kuriakose, Raju Shrestha, Frode Eika Sandnes
2021 B conf
SMC
Bineeth Kuriakose, Raju Shrestha, Frode Eika Sandnes
2021 conf
PETRA
Bineeth Kuriakose, Raju Shrestha, Frode Eika Sandnes
2020 conf
iSCI
Abhijeet Sapkota, Raju Shrestha
2020 conf
MLSP
Daniel Romero, Raju Shrestha, Yves Teganya, Sundeep Prabhakar Chepuri
2020 J jnl
Multimodal Technol. Interact.
Bineeth Kuriakose, Raju Shrestha, Frode Eika Sandnes
2020 C conf
CLOSER
Raju Shrestha
2020 conf
HCI (9)
Bineeth Kuriakose, Raju Shrestha, Frode Eika Sandnes
2020 conf
ICCMS
Raju Shrestha
2019 C conf
CLOSER
Naveed Khan, Raju Shrestha
2019 C conf
MEDES
Naveed Khan, Hårek Haugerud, Raju Shrestha, Anis Yazidi
2018 conf
SITIS
Raju Shrestha, Jon Yngve Hardeberg
2017 C conf
CLOSER
Raju Shrestha
2016 conf
UD
Raju Shrestha
2015 conf
CIC
Raju Shrestha, Jon Yngve Hardeberg
2015 conf
Image Processing: Machine Vision Applications
Raju Shrestha, Jon Yngve Hardeberg
2014 conf
CIC
Raju Shrestha, Jon Yngve Hardeberg
2014 C conf
ICISP
Raju Shrestha, Jon Yngve Hardeberg
2013 conf
CCIW
Raju Shrestha, Jon Yngve Hardeberg
2013 conf
CIC
Raju Shrestha, Jon Yngve Hardeberg
2012 conf
CVMP
Vamsidhar Reddy, Alexander Eichhorn, Jon Yngve Hardeberg, Raju Shrestha
2012 conf
CGIV
Raju Shrestha, Jon Yngve Hardeberg
2012 conf
Sensors, Cameras, and Systems for Industrial and Scientific Applications
Raju Shrestha, Jon Yngve Hardeberg
2012 conf
SITIS
Raju Shrestha, Jon Yngve Hardeberg, Clotilde Boust
2012 C conf
ICISP
Raju Shrestha, Jon Yngve Hardeberg
2011 J jnl
EURASIP J. Adv. Signal Process.
Raju Shrestha, Alamin Mansouri, Jon Yngve Hardeberg
2011 conf
Digital Photography
Raju Shrestha, Jon Yngve Hardeberg, Alamin Mansouri
2011 conf
Sensors, Cameras, and Systems for Industrial, Scientific, and Consumer Applications
Raju Shrestha, Jon Yngve Hardeberg, Rahat Khan
2010 conf
EUSIPCO
Raju Shrestha, Jon Yngve Hardeberg
2005 B conf
PAKDD
Raju Shrestha, Yaping Lin
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.")