Jagadeesan Jayender

44 papers A* 3A 2C 1Journal 23Unranked 15
YearRankTypeTitle / Venue / Authors
2025 J jnl
IEEE Robotics Autom. Lett.
Navid Feizi, Filipe C. Pedrosa, Jagadeesan Jayender, Rajni V. Patel
2025 A* conf
ICRA
Filipe C. Pedrosa, Navid Feizi, Dianne Sacco, Rajni V. Patel, Jagadeesan Jayender
2023 J jnl
CoRR
Christian DeBuys, Florin C. Ghesu, Jagadeesan Jayender, Reza Langari, Young-Ho Kim
2022 J jnl
IEEE Trans. Image Process.
Haoyin Zhou, Jagadeesan Jayender
2021 J jnl
Comput. Medical Imaging Graph.
Duo Wang, Tao Zhang, Ming Li, Raphael Bueno, Jagadeesan Jayender
2021 J jnl
Comput. Medical Imaging Graph.
Duo Wang, Ming Li, Nir Ben-Shlomo, C. Eduardo Corrales, Yu Cheng, Tao Zhang, Jagadeesan Jayender
2021 conf
MICCAI (4)
Haoyin Zhou, Jagadeesan Jayender
2021 J jnl
Int. J. Comput. Assist. Radiol. Surg.
Zhe Xu, Jie Luo, Jiangpeng Yan, Xiu Li, Jagadeesan Jayender
2021 conf
MICCAI (1)
Zhe Xu, Donghuan Lu, Yixin Wang, Jie Luo, Jagadeesan Jayender, Kai Ma, Yefeng Zheng, Xiu Li
2021 J jnl
IEEE Trans. Medical Imaging
Haoyin Zhou, Jagadeesan Jayender
2021 J jnl
CoRR
Haoyin Zhou, Jagadeesan Jayender
2020 J jnl
CoRR
Zhe Xu, Jie Luo, Jiangpeng Yan, Xiu Li, Jagadeesan Jayender
2020 J jnl
CoRR
Haoyin Zhou, Tao Zhang, Jagadeesan Jayender
2020 J jnl
CoRR
Haoyin Zhou, Jagadeesan Jayender
2020 J jnl
CoRR
Haoyin Zhou, Jagadeesan Jayender
2020 J jnl
CoRR
Haoyin Zhou, Jagadeesan Jayender
2019 conf
MICCAI (2)
Duo Wang, Ming Li, Nir Ben-Shlomo, C. Eduardo Corrales, Yu Cheng, Tao Zhang, Jagadeesan Jayender
2019 J jnl
CoRR
Duo Wang, Ming Li, Nir Ben-Shlomo, C. Eduardo Corrales, Yu Cheng, Tao Zhang, Jagadeesan Jayender
2019 J jnl
CoRR
Haoyin Zhou, Eva Gombos, Mehra Golshan, Jagadeesan Jayender
2018 conf
MICCAI (4)
Jagadeesan Jayender, Brian Arun Xavier, Franklin King, Ahmed Hosny, David Black, Steve Pieper, Ali Tavakkoli
2018 J jnl
Int. J. Comput. Assist. Radiol. Surg.
Bai-Chuan Jiang, Wenpeng Gao, Daniel F. Kacher, Erez Nevo, Barry J. Fetics, Thomas C. Lee, Jagadeesan Jayender
2017 conf
Image-Guided Procedures
Wenpeng Gao, Bai-Chuan Jiang, Daniel F. Kacher, Barry J. Fetics, Erez Nevo, Thomas C. Lee, Jagadeesan Jayender
2016 J jnl
J. Medical Robotics Res.
Franklin King, Jagadeesan Jayender, Sharath K. Bhagavatula, Paul B. Shyn, Steve Pieper, Tina Kapur, Andras Lasso, Gabor Fichtinger
2016 J jnl
Medical Image Anal.
Tina Kapur, Steve Pieper, Andriy Fedorov, Jean-Christophe Fillion-Robin, Michael Halle, Lauren O'Donnell, Andras Lasso, Tamas Ungi, Csaba Pinter, Julien Finet, Sonia Pujol, Jagadeesan Jayender, Junichi Tokuda, Isaiah Norton, Raúl San José Estépar, David T. Gering, Hugo J. W. L. Aerts, Marianna Jakab, Nobuhiko Hata, Luiz Ibáñez, Daniel J. Blezek, Jim Miller, Stephen R. Aylward, W. Eric L. Grimson, Gabor Fichtinger, William M. Wells III, William E. Lorensen, William J. Schroeder, Ron Kikinis
2016 conf
MICCAI (1)
Bai-Chuan Jiang, Wenpeng Gao, Daniel F. Kacher, Thomas C. Lee, Jagadeesan Jayender
2014 conf
EMBC
M. Anand, Franklin King, Tamas Ungi, Andras Lasso, John F. Rudan, Jagadeesan Jayender, Jan Fritz, John A. Carrino, Ferenc A. Jolesz, Gabor Fichtinger
2013 conf
ISBI
Jagadeesan Jayender, Daniel T. Ruan, Vivek Narayan, Neha Agrawal, Ferenc A. Jolesz, Hatsuho Mamata
2013 J jnl
Comput. Medical Imaging Graph.
Jagadeesan Jayender, Eva Gombos, Sona Chikarmane, Donnette Dabydeen, Ferenc A. Jolesz, Kirby G. Vosburgh
2012 conf
ISBI
Jagadeesan Jayender, Kirby G. Vosburgh, Eva Gombos, Ahmad Ashraf, Despina Kontos, Sara Gavenonis, Ferenc A. Jolesz, Kilian M. Pohl
2011 conf
AE-CAI
Jagadeesan Jayender, Inbar Spofford, Balazs I. Lengyel, Christopher C. Thompson, Kirby G. Vosburgh
2010 conf
MIAR
Jagadeesan Jayender, Raúl San José Estépar, Keith Obstein, Vaibhav Patil, Christopher C. Thompson, Kirby G. Vosburgh
2010 conf
IPCAI
Jagadeesan Jayender, Raúl San José Estépar, Kirby G. Vosburgh
2009 conf
MICCAI (1)
Jagadeesan Jayender, Rajni V. Patel, Gregory F. Michaud, Nobuhiko Hata
2009 J jnl
Int. J. Robotics Res.
Jagadeesan Jayender, Rajnikant V. Patel, Suwas Nikumb
2009 J jnl
Int. J. Robotics Res.
Ana Luisa Trejos, Jagadeesan Jayender, M. T. Perri, Michael D. Naish, Rajnikant V. Patel, Richard Malthaner
2008 J jnl
IEEE Trans. Robotics
Jagadeesan Jayender, Mahdi Azizian, Rajnikant V. Patel
2008 A* conf
ICRA
Jagadeesan Jayender, Mahdi Azizian, Rajni V. Patel
2008 J jnl
IEEE Trans. Control. Syst. Technol.
Jagadeesan Jayender, Rajnikant V. Patel, Suwas Nikumb, Mile Ostojic
2007 A conf
IROS
Jagadeesan Jayender, Mahdi Azizian, Rajni V. Patel
2007 A conf
IROS
Jagadeesan Jayender, Rajnikant V. Patel
2006 conf
CDC
Jagadeesan Jayender, Rajnikant V. Patel, Suwas Nikumb, Mile Ostojic
2006 A* conf
ICRA
Jagadeesan Jayender, Rajnikant V. Patel, Suwas Nikumb
2005 conf
CDC/ECC
Jagadeesan Jayender, Rajni V. Patel, Suwas Nikumb, Mile Ostojic
2005 C conf
CCA
Jagadeesan Jayender, Rajni V. Patel, Suwas Nikumb, Mile Ostojic
redb/extractors/decompiler/_archive/DecompileGhidra-old.py
← Index redb/extractors/decompiler/_archive/DecompileGhidra-old.py python
from hashlib import sha256
import inspect
from pathlib import Path
import subprocess
import json
import subprocess
import json
import os
import tempfile
import uuid
import shutil
import time

from dotenv import load_dotenv

from redb.extractors.enum import Tag
from redb.models.dataclasses import Decompiled
from redb.extractors.extractor import Extractor


class DecompileGhidra(Extractor):
    def __init__(
        self,
        filepath,
        log,
        index_prefix=None,
        elastic_index=None,
        known_benign=False,
        known_malicious=False,
    ):
        super().__init__(
            filepath, log, index_prefix, elastic_index, known_benign, known_malicious
        )
        self.log.debug(inspect.currentframe().f_code.co_name)
        self.elastic_index = self.index_prefix + "-ghidra"
        self.ghidra_path = "/opt/ghidra"
        self.java_script_path = (
            self.ghidra_path
            + "/Ghidra/Features/Base/ghidra_scripts/GhidraDecompilerScript.java"
        )
        self.decompiled = None
        load_dotenv()
        self.decompiled_folder = os.getenv("DECOMPILED_FOLDER", "/opt/decompiled")
        self.log.debug(f"Decompiled folder: {self.decompiled_folder}")

    def run_command(self, cmd, env=None):
        try:
            self.log.info(f"Starting command: {' '.join(cmd)}")
            start_time = time.time()
            TIMEOUT = 1200  # 20 minutes in seconds
            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
            try:
                stdout, stderr = process.communicate(timeout=TIMEOUT)
            except subprocess.TimeoutExpired:
                process.kill()
                self.log.error(f"Ghidra timed out after {TIMEOUT} seconds")
                # raise subprocess.TimeoutExpired(process.args, TIMEOUT)
                return None
            end_time = time.time()

            self.log.debug(
                f"Command finished. Execution time: {end_time - start_time:.2f} seconds"
            )
            self.log.debug(f"Return code: {process.returncode}")

            if process.returncode != 0:
                self.log.error(f"Error output:\n{stderr}")
                return None
            return stdout
        except Exception as e:
            self.log.error(f"Error running command {' '.join(cmd)}: {e}")
            return None

    def analyze_binary(self):
        self.log.debug(f"Ghidra path: {self.ghidra_path}")
        self.log.debug(f"Binary path: {self.filepath}")
        self.log.debug(f"Java script path: {self.java_script_path}")

        # Check if Java script exists
        if not os.path.exists(self.java_script_path):
            self.log.error(f"Error: Java script not found at {self.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', '')}"
        env["DECOMPILED_FOLDER"] = self.decompiled_folder

        # Print environment variables for debugging
        self.log.debug(f"JAVA_HOME: {env['JAVA_HOME']}")
        self.log.debug(f"PATH: {env['PATH']}")
        self.log.debug(f"LD_LIBRARY_PATH: {env['LD_LIBRARY_PATH']}")

        # Check Ghidra installation
        analyzeHeadless_path = f"{self.ghidra_path}/support/analyzeHeadless"
        self.log.debug(
            f"analyzeHeadless exists: {os.path.exists(analyzeHeadless_path)}"
        )

        # Create a temporary project directory
        project_path = tempfile.gettempdir() + "/ghidra_" + str(uuid.uuid4())
        os.makedirs(project_path, exist_ok=True)
        self.log.debug(f"Created temporary project path: {project_path}")
        output_file = ""

        try:
            # Run Ghidra's headless analyzer
            analyze_cmd = [
                analyzeHeadless_path,
                project_path,
                "TempProject",
                "-import",
                self.filepath,
                "-postScript",
                self.java_script_path,
                self.sha256,
                "-deleteProject",
            ]

            result = self.run_command(analyze_cmd, env=env)
            if result is None:
                return None

            # Read the output JSON file
            output_file = os.path.join(
                self.decompiled_folder, self.sha256 + "-decompiled.json"
            )
            if os.path.exists(output_file):
                with open(output_file, "r") as f:
                    functions = json.load(f)
                return functions
            else:
                self.log.error(
                    f"Output file {output_file} not found. Ghidra analysis may have failed."
                )
                return None
        finally:
            # Clean up
            if os.path.exists(project_path):
                shutil.rmtree(project_path)
                self.log.debug(f"Deleted temporary project path: {project_path}")

    def extract(self):
        self.log.debug(inspect.currentframe().f_code.co_name)
        try:
            functions = self.analyze_binary()

            if functions:
                self.log.info(f"Extracted functions from {self.filepath}:")
                for func in functions:
                    id = sha256(func["address"].encode()).hexdigest()
                    self.decompiled = Decompiled(
                        _id=id,
                        decompiled_function_name=func["name"],
                        decompiled_function_address=func["address"],
                        decompiled_function=func["decompiled"],
                    )
                    self.export_to_elastic([self.decompiled])
            else:
                self.log.error("No decompiled functions extracted.")
            return True
        except Exception as e:
            self.log.error(f"Error extracting decompiled information: {e}")
            return None

    def tag(self):
        return Tag.DECOMPILED.value