R. Daniel Bergeron

60 papers A* 3A 10B 3C 1Misc 7Journal 9Unranked 25
YearRankTypeTitle / Venue / Authors
2018 conf
BCB
Cooper J. Park, Keir J. Macartney, Junfu Shen, Kunpeng Xie, Xin Zhang, R. Daniel Bergeron, William Kelley Thomas, Cheryl P. Andam, Anthony Westbrook
2017 J jnl
Bioinform.
Anthony Westbrook, Jordan Ramsdell, Taruna Schuelke, Louisa Normington, R. Daniel Bergeron, William Kelley Thomas, Matthew D. MacManes
2015 conf
ICDIP
Han Hu, Yuri Rzhanov, Philip J. Hatcher, R. Daniel Bergeron
2012 Misc conf
Visualization and Data Analysis
Jonathan Frain, R. Daniel Bergeron
2011 Misc conf
HiPC
Andrew Foulks, R. Daniel Bergeron
2011 Misc conf
Visualization and Data Analysis
Andrew Foulks, R. Daniel Bergeron, Samuel H. Vohr
2010 conf
High Performance Graphics
Thomas Fogal, Hank Childs, Siddharth Shankar, Jens H. Krüger, R. Daniel Bergeron, Philip J. Hatcher
2009 conf
ISVC (2)
Dan R. Lipsa, R. Daniel Bergeron, Ted M. Sparr, Robert S. Laramee
2009 Misc conf
VDA
Andrew Foulks, R. Daniel Bergeron
2007 C conf
IV
Morel Henley, Mikkel Hagen, R. Daniel Bergeron
2007 Misc conf
Visualization and Data Analysis
Dan R. Lipsa, Philip J. Rhodes, R. Daniel Bergeron, Ted M. Sparr
2007 J jnl
Comput. Graph.
Jacob Stoddard, R. Daniel Bergeron, Donald H. House
2005 B conf
SSDBM
Philip J. Rhodes, Xuan Tang, R. Daniel Bergeron, Ted M. Sparr
2005 conf
ACM Southeast Regional Conference (1)
R. Daniel Bergeron, Dan R. Lipsa, Philip J. Rhodes
2005 Misc conf
Visualization and Data Analysis
Philip J. Rhodes, Xuan Tang, R. Daniel Bergeron, Ted M. Sparr
2005 Misc conf
Visualization and Data Analysis
Andrew Foulks, R. Daniel Bergeron, John P. McHugh
2003 conf
Data Visualization: The State of the Art
Philip J. Rhodes, R. Daniel Bergeron, Ted M. Sparr
2003 conf
Eurographics (Short Presentations)
Philip J. Rhodes, Robert S. Laramee, R. Daniel Bergeron, Ted M. Sparr
2002 B conf
SOFSEM
Philip J. Rhodes, R. Daniel Bergeron, Ted M. Sparr
1999 conf
INFOVIS
Richard M. Wilson, R. Daniel Bergeron
1998 J jnl
Comput. Graph.
Edward S. Briggs Jr., R. Daniel Bergeron
1998 B conf
SSDBM
David T. Kao, R. Daniel Bergeron, Ted M. Sparr
1998 J jnl
J. Parallel Distributed Comput.
Joseph M. Joy, R. Daniel Bergeron
1997 A conf
IEEE Visualization
Pak Chung Wong, R. Daniel Bergeron
1997 A conf
IEEE Visualization
Pak Chung Wong, R. Daniel Bergeron
1997 conf
Scientific Visualization
Pak Chung Wong, R. Daniel Bergeron
1996 conf
INFOVIS
Pak Chung Wong, Andrew H. Crabb, R. Daniel Bergeron
1996 A conf
IEEE Visualization
Pak Chung Wong, R. Daniel Bergeron
1995 A conf
IEEE Visualization
Thomas A. Wagner, R. Daniel Bergeron
1995 ch.
Perceptual Issues in Visualization
Pak Chung Wong, R. Daniel Bergeron
1995 A conf
IEEE Visualization
Pak Chung Wong, R. Daniel Bergeron
1995 conf
Workshop on Database Issues for Data Visualization
David T. Kao, R. Daniel Bergeron, Michael J. Cullinane, Ted M. Sparr
1995 ch.
Perceptual Issues in Visualization
R. Daniel Bergeron, Daniel A. Keim, Ronald M. Pickett
1995 conf
Workshop on Database Issues for Data Visualization
Ulrich Lang, Georges G. Grinstein, R. Daniel Bergeron
1994 conf
Scientific Visualization
Pak Chung Wong, R. Daniel Bergeron
1994 A ed.
IEEE Visualization
R. Daniel Bergeron, Arie E. Kaufman
1994 conf
Scientific Visualization
Pak Chung Wong, R. Daniel Bergeron
1993 A ed.
IEEE Visualization
Gregory M. Nielson, R. Daniel Bergeron
1993 conf
ICCG
K. Seetharaman, Georges G. Grinstein, Haim Levkowitz, R. Daniel Bergeron
1993 conf
Workshop on Database Issues for Data Visualization
David T. Kao, R. Daniel Bergeron, Ted M. Sparr
1993 conf
Workshop on Database Issues for Data Visualization
R. Daniel Bergeron, William F. Cody, William L. Hibbard, David T. Kao, Kristina D. Miceli, Lloyd Treinish, Sandra Walther
1992 J jnl
Comput. Graph.
Karen M. Daniels, R. Daniel Bergeron, Georges G. Grinstein
1991 conf
Focus on Scientific Visualization
Ted M. Sparr, R. Daniel Bergeron, Loren D. Meeker
1991 A conf
IEEE Visualization
Stuart Smith, Georges G. Grinstein, R. Daniel Bergeron
1990 A* conf
CHI
Stuart Smith, R. Daniel Bergeron, Georges G. Grinstein
1989 conf
Eurographics
R. Daniel Bergeron, Georges G. Grinstein
1989 conf
Workstations for Experiments
R. Daniel Bergeron, Georges G. Grinstein
1989 conf
GI Jahrestagung (1)
Georges G. Grinstein, R. Daniel Bergeron
1987 A* conf
CHI
Mark A. Flecchia, R. Daniel Bergeron
1986 A conf
ICDCS
Ahmed K. Ezzat, R. Daniel Bergeron, John L. Pokoski
1985 A conf
SIGCSE
R. Daniel Bergeron, Mark R. Ohlson, Steve Cunningham
1985 conf
Eurographics
Lee Tibbert, R. Daniel Bergeron
1984 conf
Eurographics
Henry P. Moreton, R. Daniel Bergeron
1983 J jnl
Comput. Graph. Forum
F. Robert A. Hopgood, José L. Encarnação, Paul J. W. ten Hagen, R. Daniel Bergeron, W. Terry Hewitt, Chris D. Osland, David A. Duce
1982 A* ed.
SIGGRAPH
R. Daniel Bergeron
1978 J jnl
ACM Comput. Surv.
R. Daniel Bergeron, Peter R. Bono, James D. Foley
1976 conf
ACM Symposium on Graphic Languages
R. Daniel Bergeron
1975 J jnl
Softw. Pract. Exp.
R. Daniel Bergeron, Henri R. Bulterman
1972 J jnl
Adv. Comput.
R. Daniel Bergeron, John D. Gannon, D. P. Shecter, Frank Wm. Tompa, Andries van Dam
1971 conf
SIGPLAN Symposium on Languages for System Implementation
R. Daniel Bergeron, John D. Gannon, Andries van Dam
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.")