Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat/gdb #3

Merged
merged 2 commits into from
Jan 28, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ add_custom_target(egobuild ALL DEPENDS ego)
install(TARGETS ego-enclave DESTINATION ${CMAKE_INSTALL_DATADIR})
install(
PROGRAMS
src/ego-gdb
src/ego-go
${CMAKE_BINARY_DIR}/ego
DESTINATION ${CMAKE_INSTALL_BINDIR})
Expand All @@ -49,4 +50,5 @@ install(
PROGRAMS ${OpenEnclave_DIR}/../../../bin/oesign
RENAME ego-oesign
DESTINATION ${CMAKE_INSTALL_BINDIR})
install(DIRECTORY ${OpenEnclave_DIR}/../debugger DESTINATION ${CMAKE_INSTALL_LIBDIR}/openenclave)
install(DIRECTORY ertgo/ DESTINATION go USE_SOURCE_PERMISSIONS)
50 changes: 50 additions & 0 deletions src/ego-gdb
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
#!/usr/bin/env bash

# Copyright (c) Open Enclave SDK contributors.
# Licensed under the MIT License.

# Get path of the oegdb script
# See https://mywiki.wooledge.org/BashFAQ/028 for complexities involved
# in determining location of a bash script. ${BASH_SOURCE}, though not perfect,
# is an acceptable solution for oegdb.
# readlink provides additional benefit in getting the absolute path
# to the script directory for systems where BASH_SOURCE is only relative.
OE_GDB_DIR=$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")

# Get the path to the debugger libraries relative to the oegdb path.
# Normalize the path by cd-ing and doing a pwd -P.
OE_GDB_LIB_DIR=$(cd "$OE_GDB_DIR/../lib/openenclave/debugger" || exit; pwd -P)

OE_GDB_PLUGIN_DIR=$OE_GDB_LIB_DIR/gdb-sgx-plugin
OE_GDB_PTRACE_PATH=$OE_GDB_LIB_DIR/liboe_ptrace.so

# get all args to gdb preceding the payload executable
while [ $1 ]; do
case $1 in
-ix | -ex | -iex)
# these flags are followed by an argument
ERT_GDB_ARGS+=($1)
shift
;;
--args)
shift
break
;;
-*)
# other flags are expected to have no argument
;;
*)
# this is expected to be the executable
break
esac
ERT_GDB_ARGS+=("$1")
shift
done

# get the executable and shift such that $@ will be the remaining args
ERT_PAYLOAD=$1
shift

export PYTHONPATH=$OE_GDB_PLUGIN_DIR
LD_PRELOAD=$OE_GDB_PTRACE_PATH gdb -iex "directory $OE_GDB_PLUGIN_DIR" -iex "source $OE_GDB_PLUGIN_DIR/gdb_sgx_plugin.py" -iex "set environment LD_PRELOAD" -iex "add-auto-load-safe-path /usr/lib" \
"${ERT_GDB_ARGS[@]}" --args "$OE_GDB_DIR/ego-host" "$OE_GDB_DIR/../share/ego-enclave:$ERT_PAYLOAD" "$@"