James Keller

49 papers B 6C 3Misc 2Journal 22Unranked 16
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Jeffrey J. Dale, James Keller, Aquila Galusha
2025 J jnl
CoRR
Brendan Young, Brendan Alvey, Andreas Werbrouck, Will Murphy, James Keller, Mattias J. Young, Matthew R. Maschmann
2025 conf
FUZZ
Brendan Alvey, Derek Anderson, James Keller
2025 J jnl
Inf.
Brendan Young, Derek T. Anderson, James Keller, Frederick E. Petry, Chris J. Michael
2023 J jnl
J. Biomed. Informatics
Pallavi Gupta, Jamal Saied-Walker, Laurel Despins, David Heise, James Keller, Marjorie Skubic, Ruhan Yi, Grant J. Scott
2023 conf
CinC
Mohamed Zaid, Raul Invernizzi, Lorenzo Sala, Laurel Despins, Mihail Popescu, James Keller, Marjorie Skubic, Riccardo Sacco, Marcela Szopos, Virginia H. Huxley, Giovanna Guidoboni
2023 J jnl
IEEE Comput. Intell. Mag.
James Keller
2023 conf
AIPR
Jack Akers, Andrew R. Buck, Derek Anderson, James Keller, Raub Camaioni, Matthew Deardorff, Robert H. Luke III
2023 J jnl
Sensors
Brendan Alvey, Derek Anderson, James Keller, Andrew R. Buck
2023 J jnl
IEEE Comput. Intell. Mag.
James Keller
2022 J jnl
IEEE Geosci. Remote. Sens. Lett.
Joshua Peeples, Sarah Walker, Connor H. McCurley, Alina Zare, James Keller, Weihuang Xu
2022 B conf
IJCNN
J. Alex Hurt, James Keller, Grant J. Scott
2022 J jnl
Frontiers Digit. Health
Anup K. Mishra, Marjorie Skubic, Laurel Despins, Mihail Popescu, James Keller, Marilyn Rantz, Carmen Abbott, Moein Enayati, Shradha Shalini, Steven J. Miller
2022 C conf
ICMLA
Joshua Peeples, Alina Zare, Jeffrey Dale, James Keller
2022 J jnl
CoRR
Joshua Peeples, Alina Zare, Jeffrey Dale, James Keller
2021 C conf
IGARSS
Sarah Walker, Joshua Peeples, Jeff Dale, James Keller, Alina Zare
2021 J jnl
CoRR
Sarah Walker, Joshua Peeples, Jeff Dale, James Keller, Alina Zare
2021 J jnl
IEEE Trans. Neural Networks Learn. Syst.
Muhammad Aminul Islam, Bryce Murray, Andrew R. Buck, Derek T. Anderson, Grant J. Scott, Mihail Popescu, James Keller
2021 conf
EMBC
Mohamed Zaid, Salman Ahmad, Ahmad Suliman, Maraya Camazine, Isaac Weber, Jared Sheppard, Mihail Popescu, James Keller, Laurel Despins, Marjorie Skubic, Giovanna Guidoboni
2021 J jnl
CoRR
Joshua Peeples, Daniel Suen, Alina Zare, James Keller
2021 C conf
IGARSS
Dylan Stewart, Anna Hampton, Alina Zare, Jeff Dale, James Keller
2021 J jnl
CoRR
Dylan Stewart, Anna Hampton, Alina Zare, Jeff Dale, James Keller
2020 J jnl
J. Biomed. Informatics
Akshay Jain, Mihail Popescu, James Keller, Marilyn Rantz, Brianna Markway
2020 J jnl
CoRR
Joshua Peeples, Sarah Walker, Connor H. McCurley, Alina Zare, James Keller
2020 B conf
FUZZ-IEEE
Omar A. Ibrahim, James Keller, James C. Bezdek, Mihail Popescu
2020 B conf
FUZZ-IEEE
Blake Ruprecht, Wenlong Wu, Muhammad Aminul Islam, Derek Anderson, James Keller, Grant J. Scott, Curt H. Davis, Fred Petry, Paul Elmore, Kristen Nock, Elizabeth Gilmour
2020 J jnl
BMC Medical Informatics Decis. Mak.
Anup K. Mishra, Marjorie Skubic, Mihail Popescu, Kari Lane, Marilyn Rantz, Laurel Despins, Carmen Abbott, James Keller, Erin L. Robinson, Steven J. Miller
2019 conf
BIBM
Omar A. Ibrahim, James Keller, Mihail Popescu
2019 J jnl
CoRR
Joshua Peeples, Matthew Cook, Daniel Suen, Alina Zare, James Keller
2019 J jnl
CoRR
Muhammad Aminul Islam, Bryce Murray, Andrew R. Buck, Derek T. Anderson, Grant J. Scott, Mihail Popescu, James Keller
2019 B conf
FUZZ-IEEE
Akshay Jain, James Keller, Mihail Popescu
2019 J jnl
IEEE Trans. Biomed. Eng.
Bo Yu Su, Moein Enayati, K. C. Ho, Marjorie Skubic, Laurel Despins, James Keller, Mihail Popescu, Giovanna Guidoboni, Marilyn Rantz
2019 conf
AIPR
Safaa Albasri, Mihail Popescu, James Keller
2018 conf
IPMU (1)
Omar A. Ibrahim, Yizhuo Du, James Keller
2017 conf
PervasiveHealth
Akshay Jain, Mihail Popescu, James Keller, Jeffery L. Belden, Richelle J. Koopman, Sonal J. Patil, Shannon Canfield, Linsey M. Steege, Victoria A. Shaffer, Pete Wegier, K. D. Valentine, A. Hathaway
2017 conf
BIBM
Omar A. Ibrahim, James Keller, Mihail Popescu
2017 conf
BIBM
Rayan Gargees, James Keller, Mihail Popescu
2017 Misc conf
AMIA
Akshay Jain, Mihail Popescu, James Keller
2017 J jnl
CoRR
Alina Zare, Nicholas Young, Daniel Suen, Thomas Nabelek, Aquila Galusha, James Keller
2017 conf
SSCI
Alina Zare, Nicholas Young, Daniel Suen, Thomas Nabelek, Aquila Galusha, James Keller
2017 Misc conf
AMIA
Omar A. Ibrahim, Mihail Popescu, James Keller
2016 B conf
IJCNN
James C. Bezdek, Xiuyi Ye, Mihail Popescu, James Keller, Alina Zare
2015 B conf
FUZZ-IEEE
Mihail Popescu, James Keller, James C. Bezdek, Alina Zare
2014 conf
EMBC
Marjorie Skubic, Holly B. Jimison, James Keller, Mihail Popescu, Marilyn Rantz, Jeffrey A. Kaye, Misha Pavel
2014 conf
CICARE
Mohammed Khalilia, Mihail Popescu, James Keller
2012 conf
ACCV (2)
Shuai Tang, Xiaoyu Wang, Xutao Lv, Tony X. Han, James Keller, Zhihai He, Marjorie Skubic, Shihong Lao
2012 conf
EMBC
Calvin E. Phillips, James Keller, Mihail Popescu, Marjorie Skubic, Marilyn J. Rantz, Paul E. Cuddihy, Tarik Yardibi
2012 conf
EMBC
Paul E. Cuddihy, Tarik Yardibi, Zachary J. Legenzoff, Liang Liu, Calvin E. Phillips, Carmen Abbott, Colleen Galambos, James Keller, Mihail Popescu, Jessica Back, Marjorie Skubic, Marilyn J. Rantz
1999 J jnl
Comput. Biol. Medicine
Mihail Popescu, Paul D. Gader, James Keller, Cerry Klein, Ronald Joe Stanley, Charles William Caldwell
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.")