Neelam Gupta

45 papers A* 10A 4B 1Misc 1Journal 11Unranked 15
YearRankTypeTitle / Venue / Authors
2026 J jnl
Multim. Tools Appl.
Sarvesh Tanwar, Neelam Gupta, Prashant Kumar, Yu-Chen Hu
2025 J jnl
CoRR
Neelam Gupta, Dibakar Das, Tamizhelakkiya K, Uma Maheswari Natarajan, Sharvari Ravindran, Komal Sharma, Jyotsna Bapat, Debabrata Das
2024 J jnl
Clust. Comput.
Neelam Gupta, Sarvesh Tanwar, Sumit Badotra
2023 conf
ICCCNT
Neelam Gupta, Sarvesh Tanwar, Sunny Behal
2022 J jnl
Int. J. Perform. Eng.
Neelam Gupta, Sarvesh Tanwar, Sumit Badotra, Sunny Behal
2014 conf
AIPR
Neelam Gupta
2012 J jnl
Softw. Pract. Exp.
Vijay Nagarajan, Dennis Jeffrey, Rajiv Gupta, Neelam Gupta
2012 J jnl
Softw. Pract. Exp.
Vijay Nagarajan, Dennis Jeffrey, Rajiv Gupta, Neelam Gupta
2012 conf
AIPR
Feng Jin, Joo-Soo Kim, Susan Kutcher, Emir Haskovic, Dave Meyers, Jolanta Soos, Sudhir Trivedi, Neelam Gupta
2011 conf
AIPR
Neelam Gupta
2010 J jnl
ACM Trans. Program. Lang. Syst.
Dennis Jeffrey, Vijay Nagarajan, Rajiv Gupta, Neelam Gupta
2009 A conf
ICPC
Dennis Jeffrey, Min Feng, Neelam Gupta, Rajiv Gupta
2009 conf
ICSM
Dennis Jeffrey, Neelam Gupta, Rajiv Gupta
2008 J jnl
J. Syst. Softw.
Dennis Jeffrey, Neelam Gupta
2008 A conf
ISSTA
Dennis Jeffrey, Neelam Gupta, Rajiv Gupta
2008 conf
ICSM
Dennis Jeffrey, Neelam Gupta, Rajiv Gupta
2008 A conf
IPDPS
Rajiv Gupta, Neelam Gupta, Xiangyu Zhang, Dennis Jeffrey, Vijay Nagarajan, Sriraman Tallam, Chen Tian
2007 J jnl
Empir. Softw. Eng.
Xiangyu Zhang, Neelam Gupta, Rajiv Gupta
2007 A conf
IPDPS
Neelam Gupta, Rajiv Gupta
2007 J jnl
IEEE Trans. Software Eng.
Dennis Jeffrey, Neelam Gupta
2007 J jnl
Softw. Pract. Exp.
Xiangyu Zhang, Neelam Gupta, Rajiv Gupta
2007 conf
ICSM
Vijayanand Nagarajan, Dennis Jeffrey, Rajiv Gupta, Neelam Gupta
2007 A* conf
PLDI
Xiangyu Zhang, Sriraman Tallam, Neelam Gupta, Rajiv Gupta
2007 ch.
The Compiler Design Handbook, 2nd ed.
Xiangyu Zhang, Neelam Gupta, Rajiv Gupta
2006 A* conf
ICSE
Neelam Gupta, Andy Podgurski
2006 A* conf
ICSE
Xiangyu Zhang, Neelam Gupta, Rajiv Gupta
2006 A* conf
PLDI
Xiangyu Zhang, Neelam Gupta, Rajiv Gupta
2006 conf
COMPSAC (1)
Dennis Jeffrey, Neelam Gupta
2006 ed.
SOQUA
Johannes Mayer, Neelam Gupta, Yves Ledru
2005 conf
AIPR
Neelam Gupta, Dale Smith
2005 conf
PASTE
Sriraman Tallam, Neelam Gupta
2005 conf
AADEBUG
Xiangyu Zhang, Haifeng He, Neelam Gupta, Rajiv Gupta
2005 A* conf
ASE
Neelam Gupta, Haifeng He, Xiangyu Zhang, Rajiv Gupta
2005 conf
ICSM
Dennis Jeffrey, Neelam Gupta
2004 B conf
FASE
Haifeng He, Neelam Gupta
2004 Misc conf
SAC
Neelam Gupta, Yongjun Cho, Mohammad Z. Hossain
2003 A* conf
ASE
Neelam Gupta, Zachary V. Heidepriem
2003 conf
AIPR
Michele Hinnrichs, Neelam Gupta, Arnold Goldberg
2003 conf
AIPR
Neelam Gupta
2002 ch.
The Compiler Design Handbook
Rajiv Gupta, Neelam Gupta
2002 A* conf
ASE
Srinivas Visvanathan, Neelam Gupta
2001 A* conf
ASE
Neelam Gupta, Praveen Rao
2000 A* conf
ASE
Neelam Gupta, Aditya P. Mathur, Mary Lou Soffa
1999 A* conf
ASE
Neelam Gupta, Aditya P. Mathur, Mary Lou Soffa
1998 conf
SIGSOFT FSE
Neelam Gupta, Aditya P. Mathur, Mary Lou Soffa
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.")