Я работаю над инструментом, который иногда захватывает выполнение приложения, включая работу в другом стеке.Как определяется указатель стека задачи ядра Linux для каждого потока?
Я пытаюсь заставить ядро всегда видеть стек приложения при выполнении определенных системных вызовов, чтобы он распечатывал квалификатор [stack] в нужном месте в/proc/pid/maps.
Однако простое изменение esp вокруг системного вызова кажется недостаточным. Когда я использую свой инструмент на «cat/proc/self/stat», я вижу, что kstkesp (entry 29 here) иногда имеет значение, которое я хочу, но иногда имеет другое значение, соответствующее моему альтернативному стеку.
Я пытаюсь понять:
- Как значение отражается в/Proc/себе/стата: 29 определяется?
- Могу ли я изменить его, чтобы он надежно имел соответствующее значение?
- Если 2 трудно ответить, где бы вы порекомендовали мне, чтобы я понял, почему значение прерывается некорректно?
Rudi, я имел в виду, где макрос KSTK_ESP указывает, то есть, где задано значение, которое мы ввели в запись 29 из/proc/pid/stat, а не как к нему обращаются, чтобы установить запись 29. I Я собираюсь дать вам щедрость, потому что мой вопрос был недостаточно ясен. Если вы можете отредактировать свой ответ, чтобы включить эту информацию, я был бы благодарен. – nitzanms
Боюсь, мне понадобится неделя обучения, чтобы дать вам более солидный ответ. Я думаю, что это несколько сложный, поскольку он включает блок задач. Этот ответ был всего лишь час или два, и я был счастлив сделать это, потому что иногда делал небольшой вклад в ядро. Извините, я больше не могу вам рассказать. –
Это круто. То, что вы мне дали, ценится. Конечно, лучше, чем позволить всей репутации идти впустую. Будет ли это иметь значение, если я ограничил свой вопрос только x86 (_64)? – nitzanms