GET_KERNEL_SYMS(2) | Руководство программиста Linux | GET_KERNEL_SYMS(2) |
ИМЯ¶
get_kernel_syms - получить экспортируемые символы ядра и модулей
СИНТАКСИС¶
#include <linux/module.h>
int get_kernel_syms(struct kernel_sym *table);
Замечание: В заголовочных файлах glibc этой системный вызов отсутствует; смотрите ЗАМЕЧАНИЯ.
ОПИСАНИЕ¶
Замечание: Данный системный вызов доступен только в ядрах до Linux 2.6.
Если table равно NULL, то get_kernel_syms() возвращает количество символов доступных для запроса. Иначе таблица заполняется структурами:
struct kernel_sym {
unsigned long value;
char name[60]; };
Символы вида #module-name представляют собой ссылки на модули. Значение, связанное с таким символом, содержит адрес, по которому загружен модуль.
К символам, экспортируемым из модуля, добавляется метка модуля, а модули возвращаются в обратном порядке, в котором были загружены.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ¶
При успешном выполнении возвращается количество символов, скопированных в table. В случае ошибки возвращается -1, а errno устанавливается в соответствующее значение.
ОШИБКИ¶
Может возвращаться только одна ошибка:
- ENOSYS
- Вызов get_kernel_syms() не поддерживается в этой версии ядра.
ВЕРСИИ¶
Данный системный вызов есть только в Linux до версии 2.4; он был удалён в Linux 2.6.
СООТВЕТСТВИЕ СТАНДАРТАМ¶
Вызов get_kernel_syms() есть только в Linux.
ЗАМЕЧАНИЯ¶
Устаревший системный вызов, не поддерживается glibc. В заголовочных файлах glibc он не объявлен, но в недавнем прошлом версии glibc до 2.23 экспортировали ABI для этого системного вызова. Поэтому, чтобы получить данный системный вызов достаточно вручную объявить интерфейс в своём коде; или же можно вызвать его через syscall(2).
ДЕФЕКТЫ¶
Нет способа указать размер буфера, выделенного для table. Если символы были добавлены в ядро после того, как программа запросила размер таблицы символов, то это вызовет повреждение данных в памяти.
Длина имён экспортируемых символов ограничена 59 знаками.
Из-за этих ограничений вместо данного системного вызова рекомендуется использовать query_module(2) (который, в настоящее время, тоже устарел и заменён на другие интерфейсы, перечисленные в конце этой справочной страницы).
СМ. ТАКЖЕ¶
create_module(2), delete_module(2), init_module(2), query_module(2)
ЗАМЕЧАНИЯ¶
Эта страница является частью проекта Linux man-pages версии 4.16. Описание проекта, информацию об ошибках и последнюю версию этой страницы можно найти по адресу https://www.kernel.org/doc/man-pages/.
ПЕРЕВОД¶
Русский перевод этой страницы руководства был сделан Azamat Hackimov <azamat.hackimov@gmail.com>, Dmitry Bolkhovskikh <d20052005@yandex.ru>, Vladislav <ivladislavefimov@gmail.com>, Yuri Kozlov <yuray@komyakino.ru> и Иван Павлов <pavia00@gmail.com>
Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3 или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.
Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.
15 сентября 2017 г. | Linux |