# This file is part of Jehanne. # # Copyright (C) 2016-2017 Giacomo Tesio set $__pendingUserBreak = 0 define jhn-print-with-context if up != 0 printf "%s %d ", up->text, up->pid end if m != 0 printf "(mach %d) ", m->machno end if $argc == 1 p $arg0 end if $argc == 2 printf $arg0, $arg1 end if $argc == 3 printf $arg0, $arg1, $arg2 end if $argc == 4 printf $arg0, $arg1, $arg2, $arg3 end printf "\n" end define jhn-log-syscalls if $argc == 0 b syscall end if $argc == 1 b syscall if up != 0 && $_streq(up->text, $arg0) end commands jhn-print-with-context " pc = 0x%x " ureg->ip c end end define jhn-log-errors b errorl commands jhn-print-with-context bt 4 c end end define jhn-break-cmd if $argc < 2 || $argc > 3 printf "usage: jhn-break-cmd symbol/path \"programName\" [address]\n" else if $__pendingUserBreak > 0 printf "jhn-break-cmd: cannot set a new breakpoint in user space until the previous one is recorded at\n " info line *$__breakAddr else add-symbol-file $arg0 0x4000c0 set __onExecFaultBreakForCMD = $arg1 set $__breakAddr = (uintptr_t)0x4000c0 set $__breakPageStart = (uintptr_t)0x400000 set $__breakPageEnd = (uintptr_t)0x401000 if $argc == 3 set $__breakAddr = (uintptr_t)$arg2 set $__breakPageStart = (uintptr_t)($__breakAddr & ~(0x1000-1)) set $__breakPageEnd = (uintptr_t)($__breakAddr + 0x1000) end b *peekAtExecFaults+114 if addr >= $__breakPageStart && addr < $__breakPageEnd set $__pendingUserBreak = $bpnum commands d $__pendingUserBreak set $__pendingUserBreak = 0 b *$__breakAddr c end end end end define jhn-break-pid if $argc < 2 || $argc > 3 printf "usage: jhn-break-pid symbol/path pid [address]\n" else if $__pendingUserBreak > 0 printf "jhn-break-pid: cannot set a new breakpoint in user space until the previous one is recorded at\n " info line *$__breakAddr else add-symbol-file $arg0 0x4000c0 set __onExecFaultBreakForPID = $arg1 set $__breakAddr = (uintptr_t)0x4000c0 set $__breakPageStart = (uintptr_t)0x400000 set $__breakPageEnd = (uintptr_t)0x401000 if $argc == 3 set $__breakAddr = (uintptr_t)$arg2 set $__breakPageStart = (uintptr_t)($__breakAddr & ~(0x1000-1)) set $__breakPageEnd = (uintptr_t)($__breakAddr + 0x1000) end b *peekAtExecFaults+64 if addr >= $__breakPageStart && addr < $__breakPageEnd set $__pendingUserBreak = $bpnum commands d $__pendingUserBreak set $__pendingUserBreak = 0 b *$__breakAddr c end end end end define jhn-connect if $argc == 1 target remote $arg0 else target remote :1234 end printf "connected to QEMU\n" if $pc == waitdebugger+22 set var c = 1 end end