From c3ba1f0bc7b803ade42a3d118a744795491141e0 Mon Sep 17 00:00:00 2001 From: TheBrokenRail Date: Sat, 15 Feb 2025 00:36:44 -0500 Subject: [PATCH] More Fixes --- example/guest/src/example.c | 16 ++++++++++++---- example/host/src/trampoline.c | 4 ++-- scripts/install-dependencies-ARM64.sh | 2 +- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/example/guest/src/example.c b/example/guest/src/example.c index 4e8a5bc..dc7d9de 100644 --- a/example/guest/src/example.c +++ b/example/guest/src/example.c @@ -3,13 +3,21 @@ #include +// Error-Checking +static void safe_trampoline(const uint32_t id, uint32_t *ret, const uint32_t length, const unsigned char *args) { + const uint32_t err = raw_trampoline(id, ret, length, args); + if (err != 0) { + fprintf(stderr, "Error: %u\n", err); + } +} + // Call Trampoline With String -void run(uint32_t cmd, const char *str) { - unsigned char *args = (unsigned char *) str; +void run(const uint32_t cmd, const char *str) { + const unsigned char *args = (const unsigned char *) str; // Send Command fprintf(stderr, "Guest Is Sending: %u: %s\n", cmd, str); uint32_t ret; - raw_trampoline(cmd, &ret, strlen(str) + 1, args); + safe_trampoline(cmd, &ret, strlen(str) + 1, args); fprintf(stderr, "Guest Has Received: %u\n", ret); } @@ -25,6 +33,6 @@ int main() { // Calls without a return value *may* return control // to guest code before the call has finished. INFO("Testing Trampoline Call That May Return Early"); - raw_trampoline(100, NULL, 0, NULL); + safe_trampoline(100, NULL, 0, NULL); fprintf(stderr, "Control Returned To Guest\n"); } \ No newline at end of file diff --git a/example/host/src/trampoline.c b/example/host/src/trampoline.c index fea6c7b..9209bbc 100644 --- a/example/host/src/trampoline.c +++ b/example/host/src/trampoline.c @@ -7,8 +7,8 @@ // writer: Function That Can Write To Guest Memory // id: Command ID // args: Pointer To Command Arguments -// Return Value: Returned To The Guest (Unless Early Return Is Enabled) -uint32_t trampoline(trampoline_writer_t writer, uint32_t id, const unsigned char *args) { +// Return Value: Returned To The Guest +uint32_t trampoline(trampoline_writer_t writer, const uint32_t id, const unsigned char *args) { if (id == 100 /* Defined In ../../guest/src/example.c */) { // Early Return Allowed fprintf(stderr, "Early Return Call Started\n"); diff --git a/scripts/install-dependencies-ARM64.sh b/scripts/install-dependencies-ARM64.sh index 2d324ff..3890f98 100755 --- a/scripts/install-dependencies-ARM64.sh +++ b/scripts/install-dependencies-ARM64.sh @@ -10,4 +10,4 @@ apt-get install -y --no-install-recommends \ ninja-build \ gcc g++ \ gcc-arm-linux-gnueabihf g++-arm-linux-gnueabihf \ - libc6:armhf \ No newline at end of file + libc6:armhf libstdc++6:armhf \ No newline at end of file