get_kernel_syms(2) получить экспортируемые символы ядра и модулей

ОБЗОР

#include <linux/module.h>


int get_kernel_syms(struct kernel_sym *table);

ОПИСАНИЕ

Замечание: Данный системный вызов доступен только в ядрах до 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.

ДЕФЕКТЫ

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

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

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