Я хочу использовать функцию getname
в моем модуле ядра. Он не экспортируется. Поскольку я сейчас сталкиваюсь с этой проблемой, я хотел бы знать, как получить доступ и использовать любой символ ядра, который не экспортируется. Я полагаю, что шаги, необходимые для его использования, будут различаться в зависимости от того, что такое символ, поэтому я хотел бы посмотреть, как это будет сделано для типа (например, структуры), переменной, таблицы указателей (например, системы таблица вызовов) и функцию. Как это можно сделать в любом из этих случаев:Как получить доступ к символу ядра в модуле ядра?
- Когда я знаю адрес символа из
System.map
или/proc/kallsyms
. - Когда я знаю имя символа и хочу использовать
kallsyms_lookup_name
в его извлечении.
В настоящее время я знаю, как угнать системные вызовы, и это требует объявляющий что-то вроде
asmlinkage <return_type> (*<name_for_system_call>)(<the types of the its arguments separated by commas>);
использовать
Would что-то подобное? В http://stackoverflow.com/a/32968387/1953537 ответе на другой вопрос, пример, представленный плакате
#include <linux/kallsyms.h>
static void (*machine_power_off_p)(void);
machine_power_off = (void*) kallsyms_lookup_name("machine_power_off");
Но что, если символ возвращает указатель? Я помещу звездочку слева от (*machine_power_off_p)
?
«Не помещаю ли я звездочку слева от первого набора круглых скобок?» Какие круглые скобки? В вашем вопросе много круглых скобок. Так вы спрашиваете, как вызвать указатель на функцию? Google должен быть в состоянии сказать вам об этом. Например: [Как работают указатели функций в C?] (Http://stackoverflow.com/questions/840501/how-do-function-pointers-in-c-work) – kaylum
@kaylum Первый набор в примере справа выше этот вопрос. – Melab
'Но что, если символ возвращает указатель?" - Затем замените * left * 'void' в примере возвращаемым типом (например,, 'struct filename *'). Вопрос в том, что речь идет об использовании указателя к функциям, как заметил кайлум. – Tsyvarev