Информация об изменениях

Сообщение Re[5]: Определение стека потока, который стоит на мьютексе от 03.12.2021 11:53

Изменено 03.12.2021 12:04 lpd

Re[5]: Определение стека потока, который стоит на мьютексе
Здравствуйте, Рома Мик, Вы писали:

lpd>>Либо как вариант печатать весь стек, и среди всех адресов будут попадаться адреса возврата.

РМ>Вариант куда копать, спасибо. Можно как-нибудь, перебирая адреса, понять, что адрес похож на адрес внутри нашего исполняемого кода? Чтобы отфильтровать только такие значения.

Адреса кода будут из сегментов .text. Адреса всех областей памяти сегментов программы и библиотек проще всего для процесса получить из /proc/$PID/maps.
Либо наверняка есть dl* функции для получения только сегментов кода.
На стеке среди значений локальных переменных, кроме адресов текущего call-stackа, будут попадаться неперезатертые адреса возврата от старых call-stackов. Так что в каждом случае придется вручную разбираться какие из адресов нужны.
Re[5]: Определение стека потока, который стоит на мьютексе
Здравствуйте, Рома Мик, Вы писали:

lpd>>Либо как вариант печатать весь стек, и среди всех адресов будут попадаться адреса возврата.

РМ>Вариант куда копать, спасибо. Можно как-нибудь, перебирая адреса, понять, что адрес похож на адрес внутри нашего исполняемого кода? Чтобы отфильтровать только такие значения.

Адреса кода будут из сегментов .text. Адреса всех областей памяти сегментов программы и библиотек проще всего для процесса получить из /proc/$PID/maps. У сегментов кода там флаг eXecutable.
На стеке среди значений локальных переменных, кроме адресов текущего call-stackа, будут попадаться неперезатертые адреса возврата от старых call-stackов. Так что в каждом случае придется вручную разбираться какие из адресов нужны.