aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/hook.test.c22
-rw-r--r--test/x86.test.c5
2 files changed, 21 insertions, 6 deletions
diff --git a/test/hook.test.c b/test/hook.test.c
index 9e7cfa9..6a9a7b4 100644
--- a/test/hook.test.c
+++ b/test/hook.test.c
@@ -4,7 +4,7 @@
#ifdef _WIN32
-#include "../src/x86.c"
+#include "../src/chunklets/x86.c"
#include "../src/hook.c"
#include "../src/os.c"
@@ -30,16 +30,28 @@ __attribute__((noinline)) static int func2(int a, int b) { return a - b; }
static int (*orig_func2)(int, int);
static int hook2(int a, int b) { return orig_func2(a, b) + 5; }
+// basic reimplementation of old API to support existing test cases.
+// XXX: we could probably have tests at the boundaries of the new API too,
+// although the current tests are only testing for regressions in x86 jmp logic.
+static inline void *test_hook_inline(void *func, void *target) {
+ void *trampoline;
+ struct hook_inline_prep_ret prep = hook_inline_prep(func, &trampoline);
+ if (prep.err) return 0;
+ if (!hook_inline_mprot(prep.prologue)) return 0;
+ hook_inline_commit(prep.prologue, target);
+ return trampoline;
+}
+
TEST("Inline hooks should be able to wrap the original function") {
if (!hook_init()) return false;
- orig_func1 = (testfunc)hook_inline((void *)&func1, (void *)&hook1);
+ orig_func1 = (testfunc)test_hook_inline((void *)&func1, (void *)&hook1);
if (!orig_func1) return false;
return func1(5, 5) == 15;
}
TEST("Inline hooks should be removable again") {
if (!hook_init()) return false;
- orig_func1 = (testfunc)hook_inline((void *)&func1, (void *)&hook1);
+ orig_func1 = (testfunc)test_hook_inline((void *)&func1, (void *)&hook1);
if (!orig_func1) return false;
unhook_inline((void *)orig_func1);
return func1(5, 5) == 10;
@@ -47,9 +59,9 @@ TEST("Inline hooks should be removable again") {
TEST("Multiple functions should be able to be inline-hooked at once") {
if (!hook_init()) return false;
- orig_func1 = (testfunc)hook_inline((void *)&func1, (void *)&hook1);
+ orig_func1 = (testfunc)test_hook_inline((void *)&func1, (void *)&hook1);
if (!orig_func1) return false;
- orig_func2 = (testfunc)hook_inline((void *)&func2, (void *)&hook2);
+ orig_func2 = (testfunc)test_hook_inline((void *)&func2, (void *)&hook2);
if (!orig_func2) return false;
return func2(5, 5) == 5;
}
diff --git a/test/x86.test.c b/test/x86.test.c
index bf6e6e8..370a697 100644
--- a/test/x86.test.c
+++ b/test/x86.test.c
@@ -2,7 +2,10 @@
{.desc = "x86 opcode parsing"};
-#include "../src/x86.c"
+// TODO: should chunklets tests be moved or something? guess if/when that stuff
+// gets its own repo it would just go in there, right?
+
+#include "../src/chunklets/x86.c"
#include "../src/intdefs.h"
#include "../src/ppmagic.h"