|
| 1 | +#include <stdlib.h> |
| 2 | +#include <stdio.h> |
| 3 | + |
| 4 | +#include <ps4/kernel.h> |
| 5 | + |
| 6 | +#define SERVER_PORT 5088 |
| 7 | + |
| 8 | +int main(int argc, char **argv) |
| 9 | +{ |
| 10 | + Ps4KernelCache *c; |
| 11 | + void *m, *m2; |
| 12 | + int r; |
| 13 | + |
| 14 | + Ps4KernelThread *td; |
| 15 | + Ps4KernelSocket *client; |
| 16 | + |
| 17 | + if(ps4KernelIsInKernel() != PS4_OK) |
| 18 | + { |
| 19 | + printf("This is not a user space application.\n"); |
| 20 | + return PS4_ERROR_IS_KERNEL_ELF; |
| 21 | + } |
| 22 | + |
| 23 | + ps4KernelThreadGetCurrent(&td); |
| 24 | + r = ps4KernelSocketTCPServerCreateAcceptThenDestroy(td, &client, SERVER_PORT); |
| 25 | + |
| 26 | + m = m2 = NULL; |
| 27 | + r = ps4KernelCacheCreate(&c); |
| 28 | + r = ps4KernelSocketPrint(td, client, "cache create: %p %i\n", c, r); |
| 29 | + |
| 30 | + r = ps4KernelCacheGet(c, "foo", &m2); |
| 31 | + r = ps4KernelSocketPrint(td, client, "cache get foo m2: %p %i\n", m2, r); |
| 32 | + |
| 33 | + m = (void *)42; |
| 34 | + r = ps4KernelCacheSet(c, "foo", m); |
| 35 | + r = ps4KernelSocketPrint(td, client, "cache set foo m: %p %i\n", m, r); |
| 36 | + |
| 37 | + r = ps4KernelCacheGet(c, "foo", &m2); |
| 38 | + r = ps4KernelSocketPrint(td, client, "cache get foo m2: %p %i\n", m2, r); |
| 39 | + |
| 40 | + r = ps4KernelCacheDelete(c, "foo"); |
| 41 | + r = ps4KernelSocketPrint(td, client, "cache delete foo: %i\n", r); |
| 42 | + |
| 43 | + r = ps4KernelCacheDelete(c, "bar"); |
| 44 | + r = ps4KernelSocketPrint(td, client, "cache delete bar: %i\n", r); |
| 45 | + |
| 46 | + m2 = NULL; |
| 47 | + r = ps4KernelCacheGet(c, "foo", &m2); |
| 48 | + r = ps4KernelSocketPrint(td, client, "cache get foo m2: %p %i\n", m2, r); |
| 49 | + |
| 50 | + r = ps4KernelCacheDestroy(c); |
| 51 | + r = ps4KernelSocketPrint(td, client, "cache destroy: %p %i\n", m2, r); |
| 52 | + |
| 53 | + // Global (rerun) |
| 54 | + |
| 55 | + m = NULL; |
| 56 | + r = ps4KernelCacheGlobalGet("ps4.test.foo", &m); |
| 57 | + r = ps4KernelSocketPrint(td, client, "m: %p %i\n", m, r); |
| 58 | + |
| 59 | + m = (void *)0x42; |
| 60 | + r = ps4KernelCacheGlobalSet("ps4.test.foo", m); |
| 61 | + r = ps4KernelSocketPrint(td, client, "m: %p %i\n", m, r); |
| 62 | + |
| 63 | + m = NULL; |
| 64 | + r = ps4KernelCacheGlobalGet("ps4.test.foo", &m); |
| 65 | + r = ps4KernelSocketPrint(td, client, "m: %p %i\n", m, r); |
| 66 | + |
| 67 | + //m = ps4KernelDlSym("sysctl_handle_64"); |
| 68 | + //r = ps4KernelSocketPrint(td, client, "ps4KernelDlSym sysctl_handle_64: %p\n", m); |
| 69 | + |
| 70 | + // uses a sub-cache called ps4.kernel.symbol.lookup |
| 71 | + r = ps4KernelSymbolLookup("sysctl_handle_64", &m); |
| 72 | + r = ps4KernelSocketPrint(td, client, "ps4KernelSymbolLookup sysctl_handle_64: %p %i\n", m, r); |
| 73 | + |
| 74 | + m = NULL; |
| 75 | + r = ps4KernelCacheGlobalGet("ps4.kernel.symbol.lookup", &m); |
| 76 | + r = ps4KernelSocketPrint(td, client, "ps4.kernel.symbol.lookup: %p %i\n", m, r); |
| 77 | + |
| 78 | + |
| 79 | + r = ps4KernelSocketDestroy(client); |
| 80 | + |
| 81 | + return EXIT_SUCCESS; |
| 82 | +} |
0 commit comments