From 5cc25ec27b6c1257696c6ab571a9a347dccae623 Mon Sep 17 00:00:00 2001 From: thek4n Date: Tue, 6 Feb 2024 15:32:27 +0300 Subject: [PATCH] add gdbinit --- home/user/.config/gdb/gdbinit | 755 ++++++++++++++++++++++++++++++++++ install | 1 + 2 files changed, 756 insertions(+) create mode 100644 home/user/.config/gdb/gdbinit diff --git a/home/user/.config/gdb/gdbinit b/home/user/.config/gdb/gdbinit new file mode 100644 index 0000000..b46cf32 --- /dev/null +++ b/home/user/.config/gdb/gdbinit @@ -0,0 +1,755 @@ +# set to 1 to enable 64bits target by default (32bit is the default) +set $64BITS = 1 + +set confirm off +set verbose off +set prompt \033[31mgdb$ \033[0m + +set output-radix 0x10 +set input-radix 0x10 + +# These make gdb never pause in its output +set height 0 +set width 0 + + + +# _____________breakpoint aliases_____________ +define bpl + info breakpoints +end +document bpl +List all breakpoints. +end + +define bp + if $argc != 1 + help bp + else + break $arg0 + end +end +document bp +Set breakpoint. +Usage: bp LOCATION +LOCATION may be a line number, function name, or "*" and an address. + +To break on a symbol you must enclose symbol name inside "". +Example: +bp "[NSControl stringValue]" +Or else you can use directly the break command (break [NSControl stringValue]) +end + + +define bpc + if $argc != 1 + help bpc + else + clear $arg0 + end +end +document bpc +Clear breakpoint. +Usage: bpc LOCATION +LOCATION may be a line number, function name, or "*" and an address. +end + + +define bpe + if $argc != 1 + help bpe + else + enable $arg0 + end +end +document bpe +Enable breakpoint with number NUM. +Usage: bpe NUM +end + + +define bpd + if $argc != 1 + help bpd + else + disable $arg0 + end +end +document bpd +Disable breakpoint with number NUM. +Usage: bpd NUM +end + + +define bpt + if $argc != 1 + help bpt + else + tbreak $arg0 + end +end +document bpt +Set a temporary breakpoint. +Will be deleted when hit! +Usage: bpt LOCATION +LOCATION may be a line number, function name, or "*" and an address. +end + + +define bpm + if $argc != 1 + help bpm + else + awatch $arg0 + end +end +document bpm +Set a read/write breakpoint on EXPRESSION, e.g. *address. +Usage: bpm EXPRESSION +end + + +define bhb + if $argc != 1 + help bhb + else + hb $arg0 + end +end +document bhb +Set hardware assisted breakpoint. +Usage: bhb LOCATION +LOCATION may be a line number, function name, or "*" and an address. +end + + + + +# ______________process information____________ +define argv + show args +end +document argv +Print program arguments. +end + + +define stack + if $argc == 0 + info stack + end + if $argc == 1 + info stack $arg0 + end + if $argc > 1 + help stack + end +end +document stack +Print backtrace of the call stack, or innermost COUNT frames. +Usage: stack +end + + +define frame + info frame + info args + info locals +end +document frame +Print stack frame. +end + + +define flags +# OF (overflow) flag + if (($eflags >> 0xB) & 1) + printf "O " + set $_of_flag = 1 + else + printf "o " + set $_of_flag = 0 + end + if (($eflags >> 0xA) & 1) + printf "D " + else + printf "d " + end + if (($eflags >> 9) & 1) + printf "I " + else + printf "i " + end + if (($eflags >> 8) & 1) + printf "T " + else + printf "t " + end +# SF (sign) flag + if (($eflags >> 7) & 1) + printf "S " + set $_sf_flag = 1 + else + printf "s " + set $_sf_flag = 0 + end +# ZF (zero) flag + if (($eflags >> 6) & 1) + printf "Z " + set $_zf_flag = 1 + else + printf "z " + set $_zf_flag = 0 + end + if (($eflags >> 4) & 1) + printf "A " + else + printf "a " + end +# PF (parity) flag + if (($eflags >> 2) & 1) + printf "P " + set $_pf_flag = 1 + else + printf "p " + set $_pf_flag = 0 + end +# CF (carry) flag + if ($eflags & 1) + printf "C " + set $_cf_flag = 1 + else + printf "c " + set $_cf_flag = 0 + end + printf "\n" +end +document flags +Print flags register. +end + + +define eflags + printf " OF <%d> DF <%d> IF <%d> TF <%d>",\ + (($eflags >> 0xB) & 1), (($eflags >> 0xA) & 1), \ + (($eflags >> 9) & 1), (($eflags >> 8) & 1) + printf " SF <%d> ZF <%d> AF <%d> PF <%d> CF <%d>\n",\ + (($eflags >> 7) & 1), (($eflags >> 6) & 1),\ + (($eflags >> 4) & 1), (($eflags >> 2) & 1), ($eflags & 1) + printf " ID <%d> VIP <%d> VIF <%d> AC <%d>",\ + (($eflags >> 0x15) & 1), (($eflags >> 0x14) & 1), \ + (($eflags >> 0x13) & 1), (($eflags >> 0x12) & 1) + printf " VM <%d> RF <%d> NT <%d> IOPL <%d>\n",\ + (($eflags >> 0x11) & 1), (($eflags >> 0x10) & 1),\ + (($eflags >> 0xE) & 1), (($eflags >> 0xC) & 3) +end +document eflags +Print eflags register. +end + + +define reg + if ($64BITS == 1) +# 64bits stuff + printf " " + echo \033[32m + printf "RAX:" + echo \033[0m + printf " 0x%016lX ", $rax + echo \033[32m + printf "RBX:" + echo \033[0m + printf " 0x%016lX ", $rbx + echo \033[32m + printf "RCX:" + echo \033[0m + printf " 0x%016lX ", $rcx + echo \033[32m + printf "RDX:" + echo \033[0m + printf " 0x%016lX ", $rdx + echo \033[1m\033[4m\033[31m + flags + echo \033[0m + printf " " + echo \033[32m + printf "RSI:" + echo \033[0m + printf " 0x%016lX ", $rsi + echo \033[32m + printf "RDI:" + echo \033[0m + printf " 0x%016lX ", $rdi + echo \033[32m + printf "RBP:" + echo \033[0m + printf " 0x%016lX ", $rbp + echo \033[32m + printf "RSP:" + echo \033[0m + printf " 0x%016lX ", $rsp + echo \033[32m + printf "RIP:" + echo \033[0m + printf " 0x%016lX\n ", $rip + echo \033[32m + printf "R8 :" + echo \033[0m + printf " 0x%016lX ", $r8 + echo \033[32m + printf "R9 :" + echo \033[0m + printf " 0x%016lX ", $r9 + echo \033[32m + printf "R10:" + echo \033[0m + printf " 0x%016lX ", $r10 + echo \033[32m + printf "R11:" + echo \033[0m + printf " 0x%016lX ", $r11 + echo \033[32m + printf "R12:" + echo \033[0m + printf " 0x%016lX\n ", $r12 + echo \033[32m + printf "R13:" + echo \033[0m + printf " 0x%016lX ", $r13 + echo \033[32m + printf "R14:" + echo \033[0m + printf " 0x%016lX ", $r14 + echo \033[32m + printf "R15:" + echo \033[0m + printf " 0x%016lX\n ", $r15 + echo \033[32m + printf "CS:" + echo \033[0m + printf " %04X ", $cs + echo \033[32m + printf "DS:" + echo \033[0m + printf " %04X ", $ds + echo \033[32m + printf "ES:" + echo \033[0m + printf " %04X ", $es + echo \033[32m + printf "FS:" + echo \033[0m + printf " %04X ", $fs + echo \033[32m + printf "GS:" + echo \033[0m + printf " %04X ", $gs + echo \033[32m + printf "SS:" + echo \033[0m + printf " %04X", $ss + echo \033[0m +# 32bits stuff + else + printf " " + echo \033[32m + printf "EAX:" + echo \033[0m + printf " 0x%08X ", $eax + echo \033[32m + printf "EBX:" + echo \033[0m + printf " 0x%08X ", $ebx + echo \033[32m + printf "ECX:" + echo \033[0m + printf " 0x%08X ", $ecx + echo \033[32m + printf "EDX:" + echo \033[0m + printf " 0x%08X ", $edx + echo \033[1m\033[4m\033[31m + flags + echo \033[0m + printf " " + echo \033[32m + printf "ESI:" + echo \033[0m + printf " 0x%08X ", $esi + echo \033[32m + printf "EDI:" + echo \033[0m + printf " 0x%08X ", $edi + echo \033[32m + printf "EBP:" + echo \033[0m + printf " 0x%08X ", $ebp + echo \033[32m + printf "ESP:" + echo \033[0m + printf " 0x%08X ", $esp + echo \033[32m + printf "EIP:" + echo \033[0m + printf " 0x%08X\n ", $eip + echo \033[32m + printf "CS:" + echo \033[0m + printf " %04X ", $cs + echo \033[32m + printf "DS:" + echo \033[0m + printf " %04X ", $ds + echo \033[32m + printf "ES:" + echo \033[0m + printf " %04X ", $es + echo \033[32m + printf "FS:" + echo \033[0m + printf " %04X ", $fs + echo \033[32m + printf "GS:" + echo \033[0m + printf " %04X ", $gs + echo \033[32m + printf "SS:" + echo \033[0m + printf " %04X", $ss + echo \033[0m + end +# call smallregisters + smallregisters +# display conditional jump routine + if ($64BITS == 1) + printf "\t\t\t\t" + end + dumpjump + printf "\n" +end +document reg +Print CPU registers. +end + +define smallregisters + if ($64BITS == 1) +#64bits stuff + # from rax + set $eax = $rax & 0xffffffff + set $ax = $rax & 0xffff + set $al = $ax & 0xff + set $ah = $ax >> 8 + # from rbx + set $bx = $rbx & 0xffff + set $bl = $bx & 0xff + set $bh = $bx >> 8 + # from rcx + set $ecx = $rcx & 0xffffffff + set $cx = $rcx & 0xffff + set $cl = $cx & 0xff + set $ch = $cx >> 8 + # from rdx + set $edx = $rdx & 0xffffffff + set $dx = $rdx & 0xffff + set $dl = $dx & 0xff + set $dh = $dx >> 8 + # from rsi + set $esi = $rsi & 0xffffffff + set $si = $rsi & 0xffff + # from rdi + set $edi = $rdi & 0xffffffff + set $di = $rdi & 0xffff +#32 bits stuff + else + # from eax + set $ax = $eax & 0xffff + set $al = $ax & 0xff + set $ah = $ax >> 8 + # from ebx + set $bx = $ebx & 0xffff + set $bl = $bx & 0xff + set $bh = $bx >> 8 + # from ecx + set $cx = $ecx & 0xffff + set $cl = $cx & 0xff + set $ch = $cx >> 8 + # from edx + set $dx = $edx & 0xffff + set $dl = $dx & 0xff + set $dh = $dx >> 8 + # from esi + set $si = $esi & 0xffff + # from edi + set $di = $edi & 0xffff + end + +end +document smallregisters +Create the 16 and 8 bit cpu registers (gdb doesn't have them by default) +And 32bits if we are dealing with 64bits binaries +end + +define func + if $argc == 0 + info functions + end + if $argc == 1 + info functions $arg0 + end + if $argc > 1 + help func + end +end +document func +Print all function names in target, or those matching REGEXP. +Usage: func +end + + +define var + if $argc == 0 + info variables + end + if $argc == 1 + info variables $arg0 + end + if $argc > 1 + help var + end +end +document var +Print all global and static variable names (symbols), or those matching REGEXP. +Usage: var +end + + +define lib + info sharedlibrary +end +document lib +Print shared libraries linked to target. +end + + +define sig + if $argc == 0 + info signals + end + if $argc == 1 + info signals $arg0 + end + if $argc > 1 + help sig + end +end +document sig +Print what debugger does when program gets various signals. +Specify a SIGNAL as argument to print info on that signal only. +Usage: sig +end + + +define threads + info threads +end +document threads +Print threads in target. +end + + +define dis + if $argc == 0 + disassemble + end + if $argc == 1 + disassemble $arg0 + end + if $argc == 2 + disassemble $arg0 $arg1 + end + if $argc > 2 + help dis + end +end +document dis +Disassemble a specified section of memory. +Default is to disassemble the function surrounding the PC (program counter) +of selected frame. With one argument, ADDR1, the function surrounding this +address is dumped. Two arguments are taken as a range of memory to dump. +Usage: dis +end + + + + +# __________hex/ascii dump an address_________ +define ascii_char + if $argc != 1 + help ascii_char + else + # thanks elaine :) + set $_c = *(unsigned char *)($arg0) + if ($_c < 0x20 || $_c > 0x7E) + printf "." + else + printf "%c", $_c + end + end +end +document ascii_char +Print ASCII value of byte at address ADDR. +Print "." if the value is unprintable. +Usage: ascii_char ADDR +end + + +define hex_quad + if $argc != 1 + help hex_quad + else + printf "%02X %02X %02X %02X %02X %02X %02X %02X", \ + *(unsigned char*)($arg0), *(unsigned char*)($arg0 + 1), \ + *(unsigned char*)($arg0 + 2), *(unsigned char*)($arg0 + 3), \ + *(unsigned char*)($arg0 + 4), *(unsigned char*)($arg0 + 5), \ + *(unsigned char*)($arg0 + 6), *(unsigned char*)($arg0 + 7) + end +end +document hex_quad +Print eight hexadecimal bytes starting at address ADDR. +Usage: hex_quad ADDR +end + +define hexdump + if $argc != 1 + help hexdump + else + echo \033[1m + if ($64BITS == 1) + printf "0x%016lX : ", $arg0 + else + printf "0x%08X : ", $arg0 + end + echo \033[0m + hex_quad $arg0 + echo \033[1m + printf " - " + echo \033[0m + hex_quad $arg0+8 + printf " " + echo \033[1m + ascii_char $arg0+0x0 + ascii_char $arg0+0x1 + ascii_char $arg0+0x2 + ascii_char $arg0+0x3 + ascii_char $arg0+0x4 + ascii_char $arg0+0x5 + ascii_char $arg0+0x6 + ascii_char $arg0+0x7 + ascii_char $arg0+0x8 + ascii_char $arg0+0x9 + ascii_char $arg0+0xA + ascii_char $arg0+0xB + ascii_char $arg0+0xC + ascii_char $arg0+0xD + ascii_char $arg0+0xE + ascii_char $arg0+0xF + echo \033[0m + printf "\n" + end +end +document hexdump +Display a 16-byte hex/ASCII dump of memory at address ADDR. +Usage: hexdump ADDR +end + + +# _______________data window__________________ +define ddump + if $argc != 1 + help ddump + else + echo \033[34m + if ($64BITS == 1) + printf "[0x%04X:0x%016lX]", $ds, $data_addr + else + printf "[0x%04X:0x%08X]", $ds, $data_addr + end + echo \033[34m + printf "------------------------" + printf "-------------------------------" + if ($64BITS == 1) + printf "-------------------------------------" + end + + echo \033[1;34m + printf "[data]\n" + echo \033[0m + set $_count = 0 + while ($_count < $arg0) + set $_i = ($_count * 0x10) + hexdump $data_addr+$_i + set $_count++ + end + end +end +document ddump +Display NUM lines of hexdump for address in $data_addr global variable. +Usage: ddump NUM +end + + +define dd + if $argc != 1 + help dd + else + if ((($arg0 >> 0x18) == 0x40) || (($arg0 >> 0x18) == 0x08) || (($arg0 >> 0x18) == 0xBF)) + set $data_addr = $arg0 + ddump 0x10 + else + printf "Invalid address: %08X\n", $arg0 + end + end +end +document dd +Display 16 lines of a hex dump of address starting at ADDR. +Usage: dd ADDR +end + + +define datawin + if ($64BITS == 1) + if ((($rsi >> 0x18) == 0x40) || (($rsi >> 0x18) == 0x08) || (($rsi >> 0x18) == 0xBF)) + set $data_addr = $rsi + else + if ((($rdi >> 0x18) == 0x40) || (($rdi >> 0x18) == 0x08) || (($rdi >> 0x18) == 0xBF)) + set $data_addr = $rdi + else + if ((($rax >> 0x18) == 0x40) || (($rax >> 0x18) == 0x08) || (($rax >> 0x18) == 0xBF)) + set $data_addr = $rax + else + set $data_addr = $rsp + end + end + end + + else + if ((($esi >> 0x18) == 0x40) || (($esi >> 0x18) == 0x08) || (($esi >> 0x18) == 0xBF)) + set $data_addr = $esi + else + if ((($edi >> 0x18) == 0x40) || (($edi >> 0x18) == 0x08) || (($edi >> 0x18) == 0xBF)) + set $data_addr = $edi + else + if ((($eax >> 0x18) == 0x40) || (($eax >> 0x18) == 0x08) || (($eax >> 0x18) == 0xBF)) + set $data_addr = $eax + else + set $data_addr = $esp + end + end + end + end + ddump $CONTEXTSIZE_DATA +end +document datawin +Display valid address from one register in data window. +Registers to choose are: esi, edi, eax, or esp. +end \ No newline at end of file diff --git a/install b/install index ef0574d..baa5540 100755 --- a/install +++ b/install @@ -27,6 +27,7 @@ declare -r -A TARGETS=( ["psql"]=".psqlrc" ["docker"]=".docker/cli-plugins" ["ipython"]=".ipython/profile_default/ipython_config.py" + ["gdb"]=".config/gdb" ) _die() {