From e5426455329d5b9439491d697405b8386836a154 Mon Sep 17 00:00:00 2001 From: johannst Date: Fri, 13 Mar 2020 21:00:32 +0000 Subject: deploy: ee4ff84abec4c0ebabde925f6d0772e256fa3ddc --- print.html | 343 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 343 insertions(+) create mode 100644 print.html (limited to 'print.html') diff --git a/print.html b/print.html new file mode 100644 index 0000000..0f03c0b --- /dev/null +++ b/print.html @@ -0,0 +1,343 @@ + + + + + + Notes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ + + + + + + + + + +
+
+

gdb(1)

+

CLI

+
  gdb [opts] [prg [-c coredump | -p pid]]
+  gdb [opts] --args prg <prg-args>
+    opts:
+      -p <pid>        attach to pid
+      -c <coredump>   use <coredump>
+      -x <file>       execute script <file> before prompt
+      -ex <cmd>       execute command <cmd> before prompt
+      --tty <tty>     set I/O tty for debugee
+
+

Interactive usage

+
  tty <tty>
+          Set <tty> as tty for debugee.
+          Make sure nobody reads from target tty, easiest is to spawn a shell
+          and run following in target tty:
+          > while true; do sleep 1024; done
+
+  set follow-fork-mode <child | parent>
+          Specify which process to follow when debuggee makes a fork(2)
+          syscall.
+
+  sharedlibrary [<regex>]
+          Load symbols of shared libs loaded by debugee. Optionally use <regex>
+          to filter libs for symbol loading.
+
+  break [-qualified] <sym> thread <tnum>
+          Set a breakpoint only for a specific thread.
+          -qualified: Tred <sym> as fully qualified symbol (quiet handy to set
+          breakpoints on C symbols in C++ contexts)
+
+  rbreak <regex>
+          Set breakpoints matching <regex>, where matching internally is done
+          on: .*<regex>.*
+
+  command [<bp_list>]
+          Define commands to run after breakpoint hit. If <bp_list> is not
+          specified attach command to last created breakpoint. Command block
+          terminated with 'end' token.
+
+          <bp_list>: Space separates list, eg 'command 2 5-8' to run command
+          for breakpoints: 2,5,6,7,8.
+
+  info functions [<regex>]
+          List functions matching <regex>. List all functions if no <regex>
+          provided.
+
+  info variables [<regex>]
+          List variables matching <regex>. List all variables if no <regex>
+          provided.
+
+  info handle [<signal>]
+          Print how to handle <signal>. If no <signal> specified print for all
+          signals.
+
+  handle <signal> <action>
+          Configure how gdb handles <signal> sent to debugee.
+          <action>:
+            stop/nostop       Catch signal in gdb and break.
+            print/noprint     Print message when gdb catches signal.
+            pass/nopass       Pass signal down to debugee.
+
+  catch signal <signal>
+          Create a catchpoint for <signal>.
+
+

User commands (macros)

+
  define <cmd>
+    # cmds
+  end
+
+  document <cmd>
+    # docu
+  end
+
+  help user-defined             List user defined commands.
+  help <cmd>                    List documentation for command <cmd>.
+
+

Hooks

+

Gdb allows to create two types of command hooks which will be either executed +before or after a certain command.

+
  define hook-<cmd>             Run commands defined in hook before
+    # cmds                      executing <cmd>.
+  end
+
+  define hookpost-<cmd>         Run commands defined in hookpost after
+    # cmds                      executing <cmd>.
+  end
+
+

Flows

+

Catch SIGSEGV and execute commands on occurrence

+
  catch signal SIGSEGV
+  command
+    bt
+    c
+  end
+
+

Run backtrace on thread 1 (batch mode)

+
  gdb --batch -ex 'thread 1' -ex 'bt' -p <pid>
+
+

Script gdb for automating debugging sessions

+
# run.gdb
+  set pagination off
+
+  break mmap
+  command
+    info reg rdi rsi rdx
+    bt
+    c
+  end
+
+  #initial drop
+  c
+
+

This script can be used as:

+
  gdb -p <pid> -x ./run.gdb  --batch &> run.log
+
+

Workaround command + finish bug

+

When using finish action inside a command block, actions after finish are +not executed anymore. To workaround that bug one can create a wrapper function +which calls finish.

+
  define handler
+  bt
+  finish
+  info reg rax
+  end
+
+  command
+  handler
+  end
+
+ +
+ + +
+
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -- cgit v1.2.3