get_kernel_syms(2)

ИМЯ
get_kernel_syms - получить экспортируемые символы ядра и модулей

СИНТАКСИС
#include <linux/module.h>

[[deprecated]] int get_kernel_syms(struct kernel_sym *table);

ОПИСАНИЕ
Note: This system call is present only before Linux 2.6.

Если table равно NULL, то get_kernel_syms() возвращает количество символов доступных для запроса. Иначе таблица заполняется структурами:

    struct kernel_sym {
        unsigned long value;
        char          name[60];
    };

Символы вида #module-name представляют собой ссылки на модули. Значение, связанное с таким символом, содержит адрес, по которому загружен модуль.

К символам, экспортируемым из модуля, добавляется метка модуля, а модули возвращаются в обратном порядке, в котором были загружены.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
On success, returns the number of symbols copied to table. On error, -1 is returned and errno is set to indicate the error.

ОШИБКИ
Может возвращаться только одна ошибка:

ENOSYS
    Вызов get_kernel_syms() не поддерживается в этой версии ядра.

СТАНДАРТЫ
Linux.

ИСТОРИЯ
Removed in Linux 2.6.

This obsolete system call is not supported by glibc. No declaration is provided in glibc headers, but, through a quirk of history, glibc versions before glibc 2.23 did export an ABI for this system call. Therefore, in order to employ this system call, it was sufficient to manually declare the interface in your code; alternatively, you could invoke the system call using syscall(2).

ДЕФЕКТЫ
Нет способа указать размер буфера, выделенного для table. Если символы были добавлены в ядро после того, как программа запросила размер таблицы символов, то это вызовет повреждение данных в памяти.

Длина имён экспортируемых символов ограничена 59 знаками.

Из-за этих ограничений вместо данного системного вызова рекомендуется использовать query_module(2) (который, в настоящее время, тоже устарел и заменён на другие интерфейсы, перечисленные в конце этой справочной страницы).

СМ. ТАКЖЕ
create_module(2), delete_module(2), init_module(2), query_module(2)

ПЕРЕВОД
Русский перевод этой страницы руководства был сделан 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 (https://www.gnu.org/licenses/gpl-3.0.html) или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на man-pages-ru-talks@lists.sourceforge.net.