summary refs log tree commit diff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rwxr-xr-x.bin/jrp.c23
1 files changed, 12 insertions, 11 deletions
diff --git a/.bin/jrp.c b/.bin/jrp.c
index cd5dbb82..72a9c303 100755
--- a/.bin/jrp.c
+++ b/.bin/jrp.c
@@ -3,13 +3,16 @@ exec cc -Wall -Wextra $@ -o $(dirname $0)/jrp $0
 #endif
 
 #include <err.h>
-#include <stdint.h>
 #include <stdio.h>
 #include <sys/mman.h>
 #include <sysexits.h>
 #include <unistd.h>
 
-enum op {
+typedef unsigned long long op;
+typedef long long value;
+typedef value *(*fptr)(value *);
+
+enum {
     OP_PROL = 0x90fc8948e5894855, // push ebp; mov rbp, rsp; mov rsp, rdi
     OP_EPIL = 0xc35dec8948e08948, // mov rax, rsp; mov rsp, rbp; pop rbp; ret
     OP_CALL = 0x90666666d0ff5f58, // pop rax; pop rdi; call rax
@@ -31,20 +34,18 @@ enum op {
     OP_SHR  = 0x906666242cd34859, // pop rcx; shr qword [rsp], cl
 };
 
-typedef int64_t *(*fptr)(int64_t *);
-
 int main() {
     int error;
     int page = getpagesize();
 
-    int64_t *stack = mmap(0, page, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, 0, 0);
-    if (stack == MAP_FAILED) err(EX_OSERR, "mmap");
-    int64_t *stack_ptr = stack + page / sizeof(int64_t);
+    value *base = mmap(0, page, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, 0, 0);
+    if (base == MAP_FAILED) err(EX_OSERR, "mmap");
+    value *stack = base + page / sizeof(value);
 
-    enum op *ops = mmap(0, page, PROT_WRITE, MAP_ANON | MAP_PRIVATE, 0, 0);
+    op *ops = mmap(0, page, PROT_WRITE, MAP_ANON | MAP_PRIVATE, 0, 0);
     if (ops == MAP_FAILED) err(EX_OSERR, "mmap");
 
-    enum op *p = ops;
+    op *p = ops;
     *p++ = OP_PROL;
     *p++ = OP_PUSH | (1 << 8);
     *p++ = OP_PUSH | (2 << 8);
@@ -57,9 +58,9 @@ int main() {
     if (error) err(EX_OSERR, "mprotect");
 
     fptr fn = (fptr) ops;
-    stack_ptr = fn(stack_ptr);
+    stack = fn(stack);
 
-    printf("%lld\n", *stack_ptr);
+    printf("%lld\n", *stack);
 
     return 0;
 }
c8&follow=1'>Release 0.5.10.2.Herbert Xu 2018-05-15parser: Fix incorrect eating of backslash newlinesHerbert Xu 2018-05-10Release 0.5.10.1.Herbert Xu 2018-05-09jobs - Do not block when waiting on SIGCHLDHerbert Xu 2018-05-03Release 0.5.10.Herbert Xu 2018-04-19eval: Variable assignments on functions are no longer persistentHerbert Xu 2018-04-19parser: Fix parameter expansion inside inner double quotesHerbert Xu 2018-04-19parser: Fix parsing of ${}Herbert Xu 2018-04-19man: correct typos, iff -> ifMartijn Dekker 2018-04-19expand: Do not quote backslashes in unquoted parameter expansionHerbert Xu 2018-04-19shell: Add subdir-objects to AM_INIT_AUTOMAKEJason Bowen 2018-04-19eval: Restore input files in evalcommandHerbert Xu 2018-04-19eval: Reap zombies after built-in commands and functionsHerbert Xu 2018-04-19redir: Fix typo in noclobber codeHerbert Xu 2018-04-19expand: Fix glibc glob(3) supportHerbert Xu 2018-04-02expand: Fix buffer overflow in expandmetaHerbert Xu 2018-04-02builtin: Move echo space/nl handling into print_escape_strHerbert Xu 2018-04-02builtin: Fix echo performance regressionHerbert Xu 2018-04-02expand: Fix ghost fields with unquoted $@/$*Herbert Xu 2018-04-02parser: Allow newlines within parameter substitutionHerbert Xu 2018-04-02expand: Fix bugs with words connected to the right of $@Herbert Xu 2018-03-25Revert "[BUILTIN] Remove unnecessary restoration of format string in printf"Herbert Xu 2018-03-22parser: Fix backquote support in here-document EOF markHerbert Xu