LINUX.ORG.RU

Программирование модулей ядра


0

0

можно ли ипользовать системные вызовы из модулей ядра, причем делать это не в виде ассемблерных вставок а по именам, например так: unlink("/dev/my_device_file"); ??? Я пробовал так делать, модуль компилируется, но при попытке загрузить его - ругается unresolved symbol <имя вызова>. Второй вопрос - как заставить модуль выводить что какую либо информацию в файл в /proc? те примеры что есть в LinuxKernelModuleProgramminGuide неработоспособны поскольку в 2.4** нет roc_register(). где можно про это почитать? спасибо.


LKMPG читай, там есть и пример перехвата сисколла, и пример создания файла в /proc

SadStork
()

Я же говорю что в lkmpg старая информация (даже в версии 2.4.0 от 4 апреля 2003г). в ядрах 2.4.* нет proc_register!!! в старых есть, я проверял, а вот с 2.4.* нет!поэтому все что касается вывода в proc - там не работает! что касается системных вызовов - они просто адрес вызова меняли в таблице и все - они ничего не вызывали там...!

V0X
() автор топика

#include <sys/syscall.h>
extern void *sys_call_table[];
int (*myread)(int,void*,int);
...
myread=sys_call_table[__NR_read];

где тут ассемблер?

а по поводу /proc - что мешает заглянуть в какой-нить драйвер какого-нить устройства?


SadStork
()

или я чего то не понимаю или ты ! sys_call_table - таблица адресов системных вызовов... в этом конкретном примере мы сначала адрес вызова read сохраняем, потом в эту таблицу пишем адрес своей функции которая будет вместо read те при любом read'e будет выполняться наша функция... по выгрузке модуля мы восстанавливаем адрес read чтобы вернуть все на место. где собственно тут ты увидел вызовы самих системных вызовов? я не нашел! где тому же read'у передаются параметры?! почитай внимательнее описани этого примера.

V0X
() автор топика

я и не говорил, что он там(в примере из lkmpg) вызывается. Но адрес функции ты определить можешь. Если тебе этого недостаточно для того, чтобы вызвать эту функцию - то лучше бы, наверное, пойти и почитать учебник по Си.

SadStork
()

Хм... ну напиши мне небольшой примерчик как например зная адрес unlink вызвать его для того чтобы удалить скажем /dev/fuck.... буду очень благодарен... пример БЕЗ ИСПОЛЬЗОВАНИЯ АССЕМБЛЕРНЫХ ВСТАВОК... спасибо...

V0X
() автор топика

Я ступил... не надо примеров... спасибо за помощь :) блин этож надо мне так тормозить :)

V0X
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.