Raghavendra Udupa

36 papers A* 11A 9B 4Misc 2Unranked 10
YearRankTypeTitle / Venue / Authors
2017 A* conf
ICML
Chirag Gupta, Arun Sai Suggala, Ankit Goyal, Harsha Vardhan Simhadri, Bhargavi Paranjape, Ashish Kumar, Saurabh Goyal, Raghavendra Udupa, Manik Varma, Prateek Jain
2016 A conf
CIKM
Ramakrishna B. Bairi, Raghavendra Udupa, Ganesh Ramakrishnan
2016 A* conf
SIGIR
Pranav Ramarao, Suresh Iyengar, Pushkar V. Chitnis, Raghavendra Udupa, Balasubramanyan Ashok
2015 A* conf
AAAI
Abhijit Bhole, Raghavendra Udupa
2012 B conf
LREC
K. Saravanan, Monojit Choudhury, Raghavendra Udupa, A. Kumaran
2012 conf
WWW (Companion Volume)
Santosh Raju, Raghavendra Udupa
2012 A conf
EACL
Jagadeesh Jagarlamudi, Hal Daumé III, Raghavendra Udupa
2011 conf
ACL (2)
Jagadeesh Jagarlamudi, Hal Daumé III, Raghavendra Udupa
2011 A* conf
EMNLP
Jagadeesh Jagarlamudi, Raghavendra Udupa, Hal Daumé III, Abhijit Bhole
2011 A* conf
IJCAI
Shaishav Kumar, Raghavendra Udupa
2011 conf
NEWS@IJCNLP
Abhijit Bhole, Goutham Tholpadi, Raghavendra Udupa
2010 A* conf
EMNLP
Raghavendra Udupa, Shaishav Kumar
2010 conf
FIRE
K. Saravanan, Raghavendra Udupa, A. Kumaran
2010 conf
HLT-NAACL
Raghavendra Udupa, Mitesh M. Khapra
2010 A* conf
SIGIR
Raghavendra Udupa, Abhijit Bhole
2010 conf
UIST (Adjunct Volume)
Chinmay Kulkarni, Santosh Raju, Raghavendra Udupa
2010 A* conf
SIGIR
Shaishav Kumar, Raghavendra Udupa
2010 A conf
ECIR
Karthik Raman, Raghavendra Udupa, Pushpak Bhattacharyya, Abhijit Bhole
2010 A* conf
AAAI
Mitesh M. Khapra, Raghavendra Udupa, A. Kumaran, Pushpak Bhattacharyya
2010 A* conf
SIGIR
Santosh Raju, Shaishav Kumar, Raghavendra Udupa
2010 A conf
ECIR
Raghavendra Udupa, Mitesh M. Khapra
2009 Misc conf
ICTIR
Raghavendra Udupa, Abhijit Bhole, Pushpak Bhattacharyya
2009 A conf
ECIR
Raghavendra Udupa, K. Saravanan, Anton Bakalov, Abhijit Bhole
2009 A conf
EACL
Raghavendra Udupa, K. Saravanan, A. Kumaran, Jagadeesh Jagarlamudi
2008 A conf
CIKM
Raghavendra Udupa, K. Saravanan, A. Kumaran, Jagadeesh Jagarlamudi
2006 A conf
EACL
Raghavendra Udupa, Hemanta Kumar Maji
2006 conf
LCPC
Rajkishore Barik, Christian Grothoff, Rahul Gupta, Vinayaka Pandit, Raghavendra Udupa
2005 conf
ALENEX/ANALCO
Tanveer A. Faruquie, Hemanta Kumar Maji, Raghavendra Udupa
2005 conf
CBSE
Rahul P. Akolkar, Tanveer A. Faruquie, Juan M. Huerta, Pankaj Kankar, Nitendra Rajput, T. V. Raman, Raghavendra Udupa, Abhishek Verma
2005 A* conf
IJCAI
Raghavendra Udupa, Hemanta Kumar Maji
2004 B conf
COLING
Raghavendra Udupa, Tanveer A. Faruquie, Hemanta Kumar Maji
2004 B conf
IJCNLP
Raghavendra Udupa, Tanveer A. Faruquie
2001 conf
AVBPA
Raghavendra Udupa, Gaurav Garg, Pramod Kumar Sharma
2000 B conf
ICPR
Sugata Ghosal, Raghavendra Udupa, Nalini K. Ratha, Sharath Pankanti
2000 A conf
WACV
Sugata Ghosal, Raghavendra Udupa, Sharath Pankanti, Nalini K. Ratha
2000 Misc conf
HiPC
Abhiram G. Ranade, Sonal Kothari, Raghavendra Udupa
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.")