2009-06-02 2 views
0

Я делаю исследование о руткитах и ​​я получил много предупреждений like`set_memory_ * функция в ядре Linux> = 2.6.25

"BUG: unable to handle kernel paging request at [addr]" 

, когда я попытался прикрепить свою собственную функцию sys_call_table[__NR_read], для пример.

В ядрах < = 2.6.25, функция change_page_attr() помогла с изменением атрибутов страницы определенного адреса. Однако в новых ядрах> = 2.6.28 эта функция устарела и заменяется функциями set_memory_*, относящимися к PAT.

Документация ядра Linux не ясна в отношении использования функций PAT; Я использовал set_memory_wc() & set_memory_uc(), чтобы изменить разрешения sys_call_table, но я продолжаю получать тот же BUG. Эти функции, я думаю, заменяют старые change_page_attr().

Я видел один пример в модуле i915, и я использовал функции таким же образом, но BUG продолжается.

Оказание помощи по этому вопросу? Я неправильно обрабатываю адреса ядра?

ответ

2

Я тестировал с конкретным ядром 2.6.26 и 2.6.30.

для 2.6.26 set_memory_wc и восстановление set_memory_wb работ.

2.6.30 не работает, если есть CONFIG_DEBUG_RODATA in Kernel Hacking (я думаю). У меня не было времени на перекомпиляцию, но я протестировал с помощью специального ядра, которое этого не имеет.

в 2.6.30 set_memory_rw и set_memory_ro также экспортируются.

Надеюсь, это поможет.

+0

Зачем нужен _restore_ после установки в режим, отличный от обратной записи? Я также читал в документах Linux, что 'set_memory_ [uc | wc | wt]' и 'set_memory_wb' должны использоваться парами, чтобы вернуть режим для обратной записи после использования, но никаких объяснений относительно мотивации не содержится. – sherrellbc

Смежные вопросы