Ядро не знает, поэтому оно не может сказать вам.Но вы можете попытаться выяснить, хотите ли вы.У вас есть кодовый адрес, который вышел из строя в стеке, так что вы можете разобрать код там, чтобы попытаться выяснить это.Нет другого способа узнать (подумайте об этом, если вам не понятно почему).Инструкция не сработала, потому что она коснулась защищенной страницы, это все, что известно, если только вы не проанализируете код сборки.
Если вы не можете сказать, с каким объектом вы имеете дело, зная только страницу, на которой произошла ошибка, я 'Настоятельно рекомендую вам пересмотреть вопрос об изменении вашего дизайна.(posix_memalign
, возможно?)
Обновление : не забывайте, что вам нужен хук, который вызывается при каждом переключении контекста.Возможно, вам придется копировать страницы вокруг каждого крючка.Например:
Контекст A обращается к странице Q с семантикой CoW.Контекст A получает доступ только для чтения к странице.
Контекст B обращается к странице Q с семантикой CoW.Контекст B получает доступ только для чтения к странице.
Контекст A идет для изменения страницы, мы делаем копию для контекста B. Контекст A теперь имеет доступ для записи к странице и изменяет ее.it.
Мы переключаемся из контекста A в контекст B. На этом этапе вы должны переключить копию страницы, которую вы сделали для контекста B.
Обратите внимание, что в противном случае контексты должны выполнять определенные вызовы для сопоставления и блокировки страниц.Это не сработает, если вы позволите контексту сохранять отображение через переключатель контекста - по крайней мере, не без большой дополнительной работы.