2012-05-04 2 views
5

Я пишу код о низкоуровневых материалах. Мне нужно знать адреса символов ядра для написания надежного кода. Поэтому я пытаюсь прочитать kallsyms, когда im в пользовательском режиме в ядре Ubuntu-3.0.19. и это выход kallsyms в пользовательском режиме.Чтение kallsyms в пользовательском режиме

... 00000000 г __ksymtab_prepare_kernel_cred 00000000 г __kcrctab_prepare_kernel_cred 00000000 г __kstrtab_prepare_kernel_cred ...

, как я могу решить эту проблему в пользовательском режиме. когда им root и все в порядке, но это не то, что мне нужно.

спасибо.

ответ

8

Преднамеренно, что /proc/kallsyms показывает нули вместо реальных адресов для пользователя без полномочий root. Это немного снижает риск безопасности.

Детали можно получить в this upstream commit. См. Также, как спецификатор печати %pK используется в s_show() function in kallsyms.c, s_show несет ответственность за предоставление записи в /proc/kallsyms.

Я сомневаюсь, что по-прежнему можно получить адреса символов, не будучи пользователем root. Нельзя получить доступ к System.map без привилегий root. То же самое для записи на /proc/sys/kernel/kptr_restrict.

+0

'Нельзя получить доступ к System.map без привилегий root. На моем сервере RHEL разрешено читать этот файл /boot/System.map -... –

+0

Зависит от дистрибутива и/или версии ядра, я думаю. Если System.map содержит адреса функций ядра и по умолчанию читается для пользователя без полномочий root, это фактически делает защиту kallsyms бесполезной. Если это RHEL 6, ядро, вероятно, будет 2.6.32, IIRC, где/proc/kallsyms не было защищено. Поэтому читаемый файл System.map не увеличивает риски безопасности в этом случае. – Eugene

+0

Если вы используете ядро, скомпилированное дистрибутивом, вы можете просто просмотреть дистрибутивные архивы для соответствующего System.map, нет? – domen

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