summary refs log tree commit diff
diff options
context:
space:
mode:
-rwxr-xr-x.bin/jrp.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/.bin/jrp.c b/.bin/jrp.c
index 83894342..cd5dbb82 100755
--- a/.bin/jrp.c
+++ b/.bin/jrp.c
@@ -2,6 +2,13 @@
 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 {
     OP_PROL = 0x90fc8948e5894855, // push ebp; mov rbp, rsp; mov rsp, rdi
     OP_EPIL = 0xc35dec8948e08948, // mov rax, rsp; mov rsp, rbp; pop rbp; ret
@@ -24,6 +31,35 @@ 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);
+
+    enum 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;
+    *p++ = OP_PROL;
+    *p++ = OP_PUSH | (1 << 8);
+    *p++ = OP_PUSH | (2 << 8);
+    *p++ = OP_ADD;
+    *p++ = OP_DUP;
+    *p++ = OP_MUL;
+    *p++ = OP_EPIL;
+
+    error = mprotect(ops, page, PROT_READ | PROT_EXEC);
+    if (error) err(EX_OSERR, "mprotect");
+
+    fptr fn = (fptr) ops;
+    stack_ptr = fn(stack_ptr);
+
+    printf("%lld\n", *stack_ptr);
+
     return 0;
 }
.c?h=vimode&id=e6c18403e22bde5a785b7172903f640d03cb8a35&follow=1'>Leave a blank line after loaded bufferJune McEnroe 2020-02-10Add -s to save and load buffersJune McEnroe 2020-02-10Show heat and other unread in titleJune McEnroe 2020-02-10Eliminate array in hashJune McEnroe I expected to have to remove some arbitrary colors, but it seems like just the range 2-75 works fine. 2020-02-10Add -HJune McEnroe 2020-02-10Hash to colors in the range 2-75June McEnroe Colors 76-87 seem too light, some almost appearing white. Colors 88-98 are shades of gray. 2020-02-10Improve color fudgingJune McEnroe Prevent fudged colors from ever being pure black. Distribute fudged colors between normal and bold if COLORS is 8. Fudge colors before checking if it's a pre-allocated pair. 2020-02-10Support all 99 IRC colorsJune McEnroe Corresponding ANSI colors from the table on ircdocs. 2020-02-10Avoid coloring mentions if there are control codesJune McEnroe This was breaking leading color codes. 2020-02-10Recalculate unreadLines on reflowJune McEnroe 2020-02-10Only make windows hotterJune McEnroe A warm message shouldn't clear a window's hotness. 2020-02-10Always increase unreadLinesJune McEnroe So that if you switch to a window and some new activity happens before you press M-u, it'll still jump to the right place. 2020-02-10Move scroll marker on resizeJune McEnroe 2020-02-10Update line count for words longer than linesJune McEnroe 2020-02-10Simplify mark, heat, unread trackingJune McEnroe 2020-02-10Update prompt when own nick changesJune McEnroe 2020-02-10Match URLs surrounded by parenthesesJune McEnroe But include a pair of parentheses in the URL itself. 2020-02-10Fix M-a so it properly cycles back to where it startedJune McEnroe 2020-02-09Add M-lJune McEnroe 2020-02-09Add /whoisJune McEnroe 2020-02-09Add /msgJune McEnroe