Я работаю над инструментом, который иногда захватывает выполнение приложения, включая работу в другом стеке.
Я пытаюсь заставить ядро всегда видеть стек приложения при выполнении определенных системных вызовов, чтобы он распечатывал квалификатор [stack] в нужном месте в /proc/pid/maps.
Однако простое изменение esp вокруг системного вызова кажется недостаточным. Когда я использую свой инструмент на "cat/proc/self/stat", я вижу kstkesp (запись 29 здесь) иногда имеет значение я но иногда имеет другое значение, соответствующее моему альтернативному стеку.
Я пытаюсь понять:
- Как определяется значение, отраженное в /proc/self/stat: 29?
- Могу ли я изменить его, чтобы он надежно имел соответствующее значение?
- Если 2 трудно ответить, где бы вы порекомендовали, чтобы я понял, почему значение прерывисто неверно?