mirror of
https://github.com/Pharaoh2k/ps5debug-NG.git
synced 2026-10-19 02:19:56 -05:00
Bump to v1.3.2 with capability 1.1 and embed a build fingerprint
Branding advertises capability level 1.1 (content-verified writes) and now carries a 16-hex build fingerprint injected by build.sh and the debugger/installer Makefiles, so a staged ELF is identifiable from CMD_BRANDING.
This commit is contained in:
1 parent
951e54a3c4
commit
10c42774f1
5 files changed
+100
-21
No files matched your search
@@ -9,6 +9,53 @@ cd "$SCRIPT_DIR"
|
||||
SDK_SRC="$SCRIPT_DIR/ps5-payload-sdk"
|
||||
SDK_INSTALL="$SDK_SRC/install"
|
||||
ARTIFACT="$SCRIPT_DIR/ps5debug-NG.elf"
|
||||
WRITE_DIAG_MODE="${WRITE_DIAG:-0}"
|
||||
WRITE_PATH_MODE="${WRITE_PATH:-0}"
|
||||
|
||||
compute_build_fingerprint() {
|
||||
local manifest source_fingerprint
|
||||
manifest="$(mktemp)"
|
||||
if git -C "$SCRIPT_DIR" rev-parse --is-inside-work-tree \
|
||||
>/dev/null 2>&1; then
|
||||
(
|
||||
cd "$SCRIPT_DIR"
|
||||
git ls-files -co --exclude-standard -z -- \
|
||||
build.sh common debugger installer |
|
||||
LC_ALL=C sort -z
|
||||
) > "$manifest"
|
||||
else
|
||||
(
|
||||
cd "$SCRIPT_DIR"
|
||||
find build.sh common debugger installer -type f \
|
||||
! -path '*/build/*' -print0 |
|
||||
LC_ALL=C sort -z
|
||||
) > "$manifest"
|
||||
fi
|
||||
if [ ! -s "$manifest" ]; then
|
||||
rm -f "$manifest"
|
||||
echo "ERROR: no payload sources found for build fingerprint." >&2
|
||||
return 1
|
||||
fi
|
||||
source_fingerprint="$(
|
||||
(cd "$SCRIPT_DIR"; xargs -0 sha256sum < "$manifest") |
|
||||
sha256sum | cut -c1-64
|
||||
)"
|
||||
rm -f "$manifest"
|
||||
printf '%s diag=%s path=%s\n' \
|
||||
"$source_fingerprint" "$WRITE_DIAG_MODE" "$WRITE_PATH_MODE" |
|
||||
sha256sum | cut -c1-16
|
||||
}
|
||||
|
||||
validate_write_build_mode() {
|
||||
case "$WRITE_DIAG_MODE" in
|
||||
0|1) ;;
|
||||
*) echo "ERROR: WRITE_DIAG must be 0 or 1." >&2; exit 1 ;;
|
||||
esac
|
||||
case "$WRITE_PATH_MODE" in
|
||||
0|1|2) ;;
|
||||
*) echo "ERROR: WRITE_PATH must be 0 (auto), 1 (DMAP), or 2 (mdbg)." >&2; exit 1 ;;
|
||||
esac
|
||||
}
|
||||
|
||||
require_build_host() {
|
||||
# This payload's release bytes are toolchain-sensitive. Keep the supported
|
||||
@@ -26,6 +73,19 @@ verify_sdk_links() {
|
||||
# with core.symlinks=false turns them into one-line regular files that the C
|
||||
# compiler then parses as source text.
|
||||
local rel target
|
||||
if ! git -C "$SCRIPT_DIR" rev-parse --is-inside-work-tree \
|
||||
>/dev/null 2>&1; then
|
||||
while IFS= read -r -d '' rel; do
|
||||
if [ ! -e "$SCRIPT_DIR/$rel" ]; then
|
||||
echo "ERROR: required SDK symlink is broken: $rel" >&2
|
||||
exit 1
|
||||
fi
|
||||
done < <(
|
||||
cd "$SCRIPT_DIR"
|
||||
find ps5-payload-sdk/include/freebsd -type l -print0
|
||||
)
|
||||
return
|
||||
fi
|
||||
while IFS= read -r rel; do
|
||||
[ -z "$rel" ] && continue
|
||||
if [ ! -L "$SCRIPT_DIR/$rel" ]; then
|
||||
@@ -53,14 +113,6 @@ verify_toolchain() {
|
||||
fi
|
||||
}
|
||||
|
||||
clean_build() {
|
||||
echo "==> cleaning"
|
||||
(cd debugger && make clean) || true
|
||||
(cd installer && make clean) || true
|
||||
(cd "$SDK_SRC" && make clean) || true
|
||||
rm -rf "$SDK_INSTALL" "$ARTIFACT"
|
||||
}
|
||||
|
||||
build_sdk() {
|
||||
if [ ! -f "$SDK_INSTALL/toolchain/prospero.mk" ]; then
|
||||
echo "==> building SDK (one-time, ~30s)"
|
||||
@@ -72,13 +124,21 @@ build_sdk() {
|
||||
}
|
||||
|
||||
build_debugger() {
|
||||
echo "==> building debugger"
|
||||
make -C debugger
|
||||
local fingerprint="$1"
|
||||
echo "==> building debugger (fingerprint $fingerprint)"
|
||||
make -B -C debugger \
|
||||
BUILD_FINGERPRINT="$fingerprint" \
|
||||
WRITE_DIAG="$WRITE_DIAG_MODE" \
|
||||
WRITE_PATH="$WRITE_PATH_MODE"
|
||||
}
|
||||
|
||||
build_installer() {
|
||||
local fingerprint="$1"
|
||||
echo "==> building installer (embeds debugger)"
|
||||
make -C installer
|
||||
make -B -C installer \
|
||||
BUILD_FINGERPRINT="$fingerprint" \
|
||||
WRITE_DIAG=0 \
|
||||
WRITE_PATH="$WRITE_PATH_MODE"
|
||||
}
|
||||
|
||||
publish_artifact() {
|
||||
@@ -93,9 +153,11 @@ if [ "${1:-}" = "clean" ]; then
|
||||
fi
|
||||
|
||||
require_build_host
|
||||
validate_write_build_mode
|
||||
verify_sdk_links
|
||||
build_sdk
|
||||
verify_toolchain
|
||||
build_debugger
|
||||
build_installer
|
||||
BUILD_FINGERPRINT="$(compute_build_fingerprint)"
|
||||
build_debugger "$BUILD_FINGERPRINT"
|
||||
build_installer "$BUILD_FINGERPRINT"
|
||||
publish_artifact
|
||||
@@ -2,5 +2,12 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#define PS5DEBUG_NG_VERSION_STR "1.3.1"
|
||||
#define PS5DEBUG_NG_BRAND_STR "ps5debug-NG by OSR v" PS5DEBUG_NG_VERSION_STR
|
||||
#define PS5DEBUG_NG_VERSION_STR "1.3.2"
|
||||
|
||||
#ifndef PS5DEBUG_NG_BUILD_FINGERPRINT_STR
|
||||
#define PS5DEBUG_NG_BUILD_FINGERPRINT_STR "unfingerprinted"
|
||||
#endif
|
||||
|
||||
#define PS5DEBUG_NG_BRAND_STR \
|
||||
"ps5debug-NG by OSR v" PS5DEBUG_NG_VERSION_STR \
|
||||
" [" PS5DEBUG_NG_BUILD_FINGERPRINT_STR "]"
|
||||
@@ -21,6 +21,13 @@ CFLAGS := -Wall -O2 -I../common/include -Iinclude -I$(ZYDIR) -I$(KSDIR)/include
|
||||
LDFLAGS := -Wl,--wrap=__patch_init
|
||||
LDLIBS := -lSceLibcInternal -lkernel_sys -lSceNet -lSceNetCtl -lSceSysCore
|
||||
|
||||
WRITE_DIAG ?= 0
|
||||
WRITE_PATH ?= 0
|
||||
BUILD_FINGERPRINT ?= unfingerprinted
|
||||
CFLAGS += -DPS5DEBUG_WRITE_DIAGNOSTICS=$(WRITE_DIAG)
|
||||
CFLAGS += -DPS5DEBUG_FORCE_WRITE_PATH=$(WRITE_PATH)
|
||||
CFLAGS += -DPS5DEBUG_NG_BUILD_FINGERPRINT_STR=\"$(BUILD_FINGERPRINT)\"
|
||||
|
||||
ZYDIS_CFLAGS := -O3 -DNDEBUG -DZYAN_NO_LIBC -w -I../common/include -Iinclude -I$(ZYDIR)
|
||||
|
||||
CXXFILES := $(wildcard source/*.cpp)
|
||||
|
||||
@@ -25,12 +25,8 @@ int handle_version(int fd, struct cmd_packet *packet) {
|
||||
|
||||
int handle_branding(int fd, struct cmd_packet *packet) {
|
||||
(void)packet;
|
||||
/* Human brand, a NUL, then the capability LEVEL. C-string clients stop at the
|
||||
NUL so the displayed brand is unchanged; capability-aware clients read the
|
||||
level past it. NOTE: the literals are split ("\0" "1.0") on purpose - "\01.0"
|
||||
would be parsed as the octal escape \01, not a NUL followed by "1.0". Bump the
|
||||
level (and add the feature on the client) as new capabilities are added. */
|
||||
static const char brand[] = PS5DEBUG_NG_BRAND_STR "\0" "1.0";
|
||||
/* Capability 1.1 adds content-verified process writes. */
|
||||
static const char brand[] = PS5DEBUG_NG_BRAND_STR "\0" "1.1";
|
||||
uint32_t len = (uint32_t)(sizeof(brand) - 1);
|
||||
net_send_all(fd, &len, sizeof(uint32_t));
|
||||
net_send_all(fd, brand, (int)len);
|
||||
|
||||
@@ -20,6 +20,13 @@ CFLAGS := -Wall -O2 -I../common/include -ffunction-sections -fdata-sections
|
||||
LDFLAGS := -Wl,--gc-sections
|
||||
LDLIBS := -lSceLibcInternal -lkernel_sys -lSceNet -lSceNetCtl -lSceSysCore
|
||||
|
||||
WRITE_DIAG ?= 0
|
||||
WRITE_PATH ?= 0
|
||||
BUILD_FINGERPRINT ?= unfingerprinted
|
||||
CFLAGS += -DPS5DEBUG_WRITE_DIAGNOSTICS=$(WRITE_DIAG)
|
||||
CFLAGS += -DPS5DEBUG_FORCE_WRITE_PATH=$(WRITE_PATH)
|
||||
CFLAGS += -DPS5DEBUG_NG_BUILD_FINGERPRINT_STR=\"$(BUILD_FINGERPRINT)\"
|
||||
|
||||
CFILES := $(wildcard ../common/source/*.c) $(wildcard source/*.c)
|
||||
|
||||
all: $(ELF)
|
||||
|
||||
Reference in new issue
Block a user