Как процесс Solaris может читать свою собственную таблицу символов?

У меня есть процесс Solaris, который представляет собой приложение C ++, загружаемое ld с несколькими .so библиотеки. В этом приложении есть функция, которая получает адрес возврата в вызывающей функции, а затем пытается определить имя указанной вызывающей функции.

Если я использую для этого dladdr (3) , это не всегда поместите то, что я ожидаю увидеть в Dl_info :: dli_sname. Похоже, он возвращает имя функции, которая не является ближайшей ниже или в значении указателя. Если я возьму значение указателя и посмотрю на результат нм , я смогу сопоставить значение с точной функцией, которую я ожидаю.

Мне интересно, есть ли способ получить символ map для процесса и позвольте ему искать имя функции без использования dladdr (3) . Мне особенно интересно получить карту символов не только для самого исполняемого файла, но и для всех .so библиотек, которые он загрузил.

Я работаю на Solaris10 / SPARC и использую gcc 4.2.x.

Спасибо!

7
задан evolvah 11 August 2011 в 18:26
поделиться