Created
April 3, 2018 23:59
-
-
Save ajeddeloh/9b74fe9527afa614506c25f0442b056f to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
### | |
### Load debuging information about GNU GRUB 2 modules into GDB | |
### automatically. Needs readelf, Perl and gmodule.pl script | |
### | |
### $Id: .gdbinit,v 1.1 2006/05/14 11:38:08 lkundrak Exp $ | |
### Lubomir Kundrak <lkudrak@skosi.org> | |
### | |
set architecture i386:x86-64 | |
#set architecture i8086 | |
# Add section numbers and addresses to .segments.tmp | |
define dump_module_sections | |
set $mod = $arg0 | |
# FIXME: save logging status | |
set logging file .segments.tmp | |
set logging redirect on | |
set logging overwrite off | |
set logging on | |
printf "%s", $mod->name | |
set $segment = $mod->segment | |
while ($segment) | |
printf " %i 0x%x", $segment->section, $segment->addr | |
set $segment = $segment->next | |
end | |
printf "\n" | |
set logging off | |
# FIXME: restore logging status | |
end | |
document dump_module_sections | |
Gather information about module whose mod structure was | |
given for use with match_and_load_symbols | |
end | |
# Generate and execute GDB commands and delete temporary files | |
# afterwards | |
define match_and_load_symbols | |
shell perl gmodule.pl <.segments.tmp >.loadsym.gdb | |
source .loadsym.gdb | |
shell rm -f .segments.tmp .loadsym.gdb | |
end | |
document match_and_load_symbols | |
Launch script, that matches section names with information | |
generated by dump_module_sections and load debugging info | |
apropriately | |
end | |
### | |
define load_module | |
dump_module_sections $arg0 | |
match_and_load_symbols | |
end | |
document load_module | |
Load debugging information for module given as argument. | |
end | |
define load_all_modules | |
set $this = grub_dl_head | |
while ($this != 0) | |
dump_module_sections $this->mod | |
set $this = $this->next | |
end | |
match_and_load_symbols | |
end | |
document load_all_modules | |
Load debugging information for all loaded modules. | |
end | |
### | |
# really primitive stack trace | |
define rbp_walk | |
info sym $rip | |
set $frameptr = $rbp | |
while ($frameptr != 0) | |
set $oldbp = *((int*)($frameptr + 4)) | |
info sym $oldbp | |
set $frameptr = *((int*)($frameptr)) | |
end | |
end | |
file kernel.exec | |
target remote :1234 | |
# this address is the "free magic broken" address for 1618.0.0 | |
watch *0x3cec8166 | |
# inform when module is loaded | |
break grub_dl_add | |
commands | |
silent | |
load_module mod | |
cont | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment