0
 следующая заметка >>
linux_gdb
(...)

хозяйке на заметку:

если Вам придётся отлаживать под линухом кернеловый модуль, который загружен неизвестно куда — это дело поправимое.
но нужно иметь рабочие символы от кернела.

1) завести в gdb процедуру lsmod и ей воспользоваться:



qdefine lsmod
printf «Address\t\tModule\t\tCoreAddress\n»
set $m=(struct list_head *)&modules
set $done=0
while ( !$done )
# вот тут 8 — для 64-х бит. для 32х — 4.
set $mp=(struct module *)((char *)$m->next — (char *)8)
# опять же llX это для 64 бит. для 32-х хватит X
printf "0x%08llX\t%s\t0x%08llX\t\n», $mp, $mp->name, $mp->module_core
if ( $mp->list->next == &modules)
set $done=1
end
set $m=$m->next
end
end

это даст адрес информации о модуле и адрес загрузки (обычно совпадает с .text)

2) если критично иметь данные о сегментах .data и/или .bss:

> p *((struct module *)(<адрес инфы о модуле>))->sect_attrs
даёт узнать сколько сегментов существует
> p ((struct module *)(<адрес инфы о модуле>))->sect_attrs->attrs[<номер сегмента>]
выдаёт название и адрес загрузки.

  следующая заметка >>
Оставить комментарий