mirror of https://github.com/pwndbg/pwndbg.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
1.4 KiB
Bash
61 lines
1.4 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
make -C binaries
|
|
|
|
ROOT_DIR="$(readlink -f ../../)"
|
|
GDB_INIT_PATH="$ROOT_DIR/gdbinit.py"
|
|
COVERAGERC_PATH="$ROOT_DIR/pyproject.toml"
|
|
|
|
handle_sigint() {
|
|
echo "Exiting..." >&2
|
|
pkill qemu-aarch64
|
|
pkill qemu-riscv64
|
|
exit 1
|
|
}
|
|
trap handle_sigint SIGINT
|
|
|
|
gdb_load_pwndbg=(--command "$GDB_INIT_PATH" -ex "set exception-verbose on")
|
|
run_gdb() {
|
|
COVERAGE_FILE=$ROOT_DIR/.cov/coverage \
|
|
COVERAGE_PROCESS_START=$COVERAGERC_PATH \
|
|
PWNDBG_DISABLE_COLORS=1 \
|
|
gdb-multiarch --silent --nx --nh "${gdb_load_pwndbg[@]}" "$@" -ex "quit" 2> /dev/null
|
|
return $?
|
|
}
|
|
|
|
test_arch() {
|
|
local arch="$1"
|
|
|
|
qemu-${arch} \
|
|
-g 1234 \
|
|
-L /usr/${arch}-linux-gnu/ \
|
|
./binaries/reference-binary.${arch}.out &
|
|
|
|
run_gdb \
|
|
-ex "set sysroot /usr/${arch}-linux-gnu/" \
|
|
-ex "file ./binaries/reference-binary.${arch}.out" \
|
|
-ex 'py import coverage;coverage.process_startup()' \
|
|
-ex "target remote :1234" \
|
|
-ex "source ./tests/user/test_${arch}.py"
|
|
local result=$?
|
|
pkill qemu-${arch}
|
|
return $result
|
|
}
|
|
|
|
ARCHS=("aarch64" "riscv64")
|
|
|
|
FAILED_TESTS=()
|
|
for arch in "${ARCHS[@]}"; do
|
|
test_arch "$arch"
|
|
if [ $? -ne 0 ]; then
|
|
FAILED_TESTS+=("$arch")
|
|
fi
|
|
done
|
|
|
|
if [ "${#FAILED_TESTS[@]}" -ne 0 ]; then
|
|
echo ""
|
|
echo "Failing tests: ${FAILED_TESTS[@]}"
|
|
echo ""
|
|
exit 1
|
|
fi
|