0
  
24 апреля 2012
linux GDB v.2
А теперь включим шлюх и блекджек.

начиная с версии 7 gdb умеет питон — воспользуемся этим:
-------------
python
class InitRoutine (gdb.Command):
"""Initialize fiop debugging; parameters: <kernel path> <fiop module path>"""
def __init__ (self):
super (InitRoutine, self).__init__ ("initfiop",gdb.COMMAND_NONE,gdb.COMPLETE_FILENAME)
super (InitRoutine, self).dont_repeat()
def invoke (self, arg, from_tty):
names=arg.split( )
loadkernel="symbol-file %s"%(names[0])
print "command:%s\n"%loadkernel
gdb.execute(loadkernel)
main=gdb.parse_and_eval("&modules")
stext=0
sdata=0
sbss=0
y=main['next'];
while (str(y) != str(main)):
x=gdb.parse_and_eval("((struct module *)(((char*)%s)-8))"%str(y))
print "mod %s @ %s"%(x['name'].string() ,str(x))
if (x['name'].string()=="fiop"):
sa=x['sect_attrs']
print "\tprocessing %i sections..."%sa['nsections']
attrs=sa['attrs']
for sidx in range(sa['nsections']):
seg=attrs[sidx]
print "\t\t%s @ %s"%(seg['name'].string(),str(seg['address']))
if (seg['name'].string()==".text"):
stext=str(seg['address'])
if (seg['name'].string()==".data"):
sdata=str(seg['address'])
if (seg['name'].string()==".bss"):
sbss=str(seg['address'])
break
y=y['next']
if (stext != 0):
loadfiop="add-symbol-file %s %s -s .data %s -s .bss %s"%(names[1],stext,sdata,sbss)
print "command: %s\n"%loadfiop
gdb.execute(loadfiop)
InitRoutine()
end
-------------
   
Оставить комментарий