Получение информации об ELF-файле отлаживаемого процесса
#include <sys/procfs.h>#define DCMD_PROC_MAPDEBUG __DIOTF( _DCMD_PROC, __PROC_SUBCMD_PROCFS + 3, procfs_debuginfo )
/proc/PID/as
).DCMD_PROC_MAPDEBUG
.NULL
.Команда используется в сочетании с вызовом devctl(), а все перечисленные аргументы являются его типовыми параметрами. Команда позволяет получить информацию об ELF-файле отлаживаемого процесса, ассоциированного с filedes.
Она используется отладчиками для поиска объектного файла, содержащего информацию о некотором символе, даже если он был удалён (stripped) на целевой системе. Этот вызов полезен только для MAP_ELF мапирований. Если была выполнена любая релокация символов, данная трансляция будет отменена. Это позволяет передать адрес в пределах ELF-файла и получить в ответ адрес, по которому был слинкован оригинальный объект, чтобы отладчик мог найти символ. Это является расширением SYSV интерфейсов.
Структура procfs_debuginfo может содержать базовый адрес интересующего смапированного сегмента.
Команда DCMD_PROC_MAPDEBUG полезна для не-ELF объектов, если нужно получить его имя.
Указатель на структуру procfs_debuginfo с заполненным полем vaddr.
Заполненная структура procfs_debuginfo.
procfs_debuginfo map;map.info.vaddr = some_vaddr;devctl( fd, DCMD_PROC_MAPDEBUG, &map, sizeof( map ), NULL );
Обратите внимание, что поле path в procfs_debuginfo представляет собой массив размером в один байт. Для его использования необходимо предуспотреть соответствующий буфер, например:
struct {procfs_debuginfo info;char buff[_POSIX_PATH_MAX];} map;
pthread_join(), MsgReply(), InterruptWait(), MsgDeliverEvent(), MsgReceive(), MsgSend(), MsgSendPulse(), nanosleep(), procfs_debuginfo, pthread_cancel(), pthread_cond_wait(), pthread_create(), pthread_exit(), pthread_mutex_lock(), sigaction(), struct sigaction, SignalAction(), SignalKill(), sigsuspend(), sigwaitinfo(), SyncSemWait(), ThreadCreate()
Предыдущий раздел: перейти