mirror of
https://github.com/radareorg/r4ghidra.git
synced 2026-11-07 06:36:02 -10:00
101 lines
2.5 KiB
Bash
Executable File
101 lines
2.5 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
HOST=localhost
|
|
PORT=9191
|
|
|
|
ROOT=$(dirname `readlink $0` 2> /dev/null)
|
|
if [ -n "${ROOT}" ]; then
|
|
cd "${ROOT}"
|
|
fi
|
|
r4cmd() {
|
|
ARG=`jq -nr --arg x "$@" '$x|@uri'`
|
|
curl "http://${HOST}:${PORT}/cmd/$ARG"
|
|
rc=$?
|
|
echo
|
|
exit $rc
|
|
}
|
|
|
|
if [ -z "$R2PIPE_IN" ]; then
|
|
if [ "$1" = cmd ]; then
|
|
shift
|
|
r4cmd "$@"
|
|
fi
|
|
echo "# You can run commands in the R4Ghidra webserver like this"
|
|
echo
|
|
echo "r4g cmd px"
|
|
echo
|
|
echo "# This program is experimental and requires r2pipe to run"
|
|
echo
|
|
echo "In the radare2 shell type: r2 -c '#!pipe r4g'"
|
|
echo
|
|
echo "# Alternatively you can connect with:"
|
|
echo
|
|
echo "r2 -C http://${HOST}:${PORT}/cmd/"
|
|
echo "r2 -c '=+http://${HOST}:${PORT}/cmd/' --"
|
|
exit 1
|
|
fi
|
|
if [ -z "$1" ]; then
|
|
echo "Usage: r4g [command]"
|
|
echo "Commands:"
|
|
echo " cmd [r4cmd] # run r4ghidra commands with curl"
|
|
echo " r2 .!r4g r2 # import r4ghidra into cmd.pdc"
|
|
echo ' dec [addr] !r4g dec `?v $$` # decompile function at given address'
|
|
echo " pull # pull changes from ghidra into r2"
|
|
echo " push # push comments and functions names from r2 to ghidra"
|
|
echo " client [addr] # call the server to request the decompilation"
|
|
echo " server [file]"
|
|
# exit 1
|
|
fi
|
|
|
|
TESTBIN=${R2_FILE}
|
|
FCNADDR=${R2_XOFFSET}
|
|
|
|
TESTBIN=/bin/ls
|
|
case "$1" in
|
|
r2)
|
|
#echo '"(pdcg,!r4g client `?v $FB`>.a,. .a,rm .a)"'
|
|
#echo 'e cmd.pdc=.(pdcg)'
|
|
#echo 'e cmd.pdc=$ghidra-dec'
|
|
echo '"$pddg*=#!pipe r4g pdd*"'
|
|
echo '"$pddg=#!pipe r4g pdd"'
|
|
echo 'e cmd.pdd=pddg'
|
|
;;
|
|
headless)
|
|
echo "Headless r4ghidra is WIP"
|
|
TESTBIN="$2"
|
|
if [ -z "${TESTBIN}" ]; then
|
|
echo "Usage: r4g server /path/to/file"
|
|
else
|
|
rm -rf Test.*
|
|
analyzeHeadless . Test.gpr -import ${TESTBIN} \
|
|
-postScript GhidraDecompilerR2.java -deleteProject
|
|
fi
|
|
;;
|
|
dec)
|
|
TESTBIN=/bin/ls
|
|
FCNADDR=$2
|
|
echo "FCNADDR=$2"
|
|
echo
|
|
rm -f decompiled.c
|
|
rm -rf Test.*
|
|
analyzeHeadless . Test.gpr -import ${TESTBIN} -postScript GhidraDecompiler.java ${FCNADDR} -deleteProject > /dev/null 2>&1
|
|
indent decompiled.c
|
|
cat decompiled.c
|
|
;;
|
|
import|pull)
|
|
TESTBIN=/bin/ls
|
|
FCNADDR=$2
|
|
echo "Assuming you have r2 http server on port 9090"
|
|
echo "r2 -e http.port=9191 -c'& =h' /bin/ls"
|
|
rm -rf Test.*
|
|
analyzeHeadless . Test.gpr -import ${TESTBIN} -postScript ghidra2radare.py -deleteProject > /dev/null 2>&1
|
|
cat ghidra-output.r2
|
|
;;
|
|
cmd|*)
|
|
r4cmd "$@"
|
|
;;
|
|
esac
|
|
|
|
#analyzeHeadless . Test.gpr -import $(TESTBIN) -postScript ghidra/GhidraDecompiler.java $(FCNADDR) -deleteProject
|
|
exit 0
|