about summary refs log tree commit diff stats
path: root/315stack-debug.subx
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2021-04-18 10:27:40 -0700
committerKartik K. Agaram <vc@akkartik.com>2021-04-18 11:56:10 -0700
commitd94821d301b5ea89221e8164382a03e72ac26851 (patch)
tree9b89f165c8f9eaf0b3d5ecd3c4efe140ca5b4cb5 /315stack-debug.subx
parentd0804ac04bece4ea885530bfc21efe70b0425189 (diff)
downloadmu-d94821d301b5ea89221e8164382a03e72ac26851.tar.gz
some primitives for monitoring code integrity
Diffstat (limited to '315stack-debug.subx')
-rw-r--r--315stack-debug.subx51
1 files changed, 51 insertions, 0 deletions
diff --git a/315stack-debug.subx b/315stack-debug.subx
new file mode 100644
index 00000000..9734fd7a
--- /dev/null
+++ b/315stack-debug.subx
@@ -0,0 +1,51 @@
+# The stack shouldn't grow into the code area.
+
+== code
+
+check-stack:
+    # . prologue
+    55/push-ebp
+    89/<- %ebp 4/r32/esp
+    # . save registers
+    50/push-eax
+    #
+    89/<- %eax 4/r32/esp
+    81 7/subop/compare %eax 0x48600/imm32
+    {
+      7f/jump-if-> break/disp8
+      (abort "stack overflow")
+    }
+$check-stack:end:
+    # . restore registers
+    58/pop-to-eax
+    # . epilogue
+    89/<- %esp 5/r32/ebp
+    5d/pop-to-ebp
+    c3/return
+
+show-stack-state:
+    # . prologue
+    55/push-ebp
+    89/<- %ebp 4/r32/esp
+    # . save registers
+    50/push-eax
+    51/push-ecx
+    52/push-edx
+    #
+    89/<- %edx 4/r32/esp
+    # save old cursor position
+    (cursor-position 0)  # => eax, ecx
+    # print at top-right
+    (set-cursor-position 0 0x70 0)
+    (draw-int32-hex-wrapping-right-then-down-from-cursor-over-full-screen 0 %edx 0xf 0xc)
+    # restore cursor position
+    (set-cursor-position %eax %ecx)
+$check-stack:end:
+    # . restore registers
+    5a/pop-to-edx
+    59/pop-to-ecx
+    58/pop-to-eax
+    # . epilogue
+    89/<- %esp 5/r32/ebp
+    5d/pop-to-ebp
+    c3/return