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