1.1, jp (?), 03:52, 25/12/2003 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Что-то после этого Тоссати и этой заи, мне как-то непосебе.. | |
1.2, Soldier (?), 09:52, 25/12/2003 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Из моего, правда небогатого, опыта по созданию модулей ядра:
gcc -c -DMODULE -I/usr/src/linux/include/ src-4.2.2.c
Может и не откомпилиться (например для ядра выше 2.4.18)
Надо
gcc -c -DMODULE -D__KERNEL__ -I/usr/src/linux/include/ src-4.2.2.c
| |
1.3, Аноним (3), 10:59, 25/12/2003 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
2Soldier:
Да Да, ты прав. Нужно подправить. Спасибо, а то это совсем из головы вылетело! | |
1.4, Аноним (3), 11:52, 25/12/2003 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
и зачем огород городить?
если можно собрать библиотечку с перехватом нужных вызовов и подгрузить ее ДО запуска программы через LD_PRELOAD
так сделано например в installwatch | |
|
2.5, Soldier (?), 12:02, 25/12/2003 [^] [^^] [^^^] [ответить]
| +/– |
2 Аноним 4
> и зачем огород городить?
>если можно собрать библиотечку с перехватом нужных вызовов и подгрузить ее ДО >запуска программы через LD_PRELOAD
>так сделано например в installwatch
А в чем принципиальная разница? И почему вы считаете ваш "огород" менее "огородистым"?
Просто любопытно...
| |
|
3.7, Аноним (-), 18:11, 25/12/2003 [^] [^^] [^^^] [ответить]
| +/– |
>>если можно собрать библиотечку с перехватом нужных вызовов и подгрузить ее ДО запуска программы через LD_PRELOAD
>А в чем принципиальная разница? И почему вы считаете ваш "огород" менее "огородистым"?
>Просто любопытно...
так чтобы очень разницы нет. хотя
не нужно пользовать код на уровне ядра - криво ниписал и машина легла. в случае библиотеки это скорее всего не грозит
не нужны права админа для работы
>остаеться возможность написания программы с использованием прямых системных вызовов, тогда тебе не получиться перехватить его
остается. Но в итоге получается код, строго заточенный под конкретную версию системы. В обычном случае этого не делается. Хотя случаи бывают всякие ;)
| |
|
2.6, Аноним (3), 13:26, 25/12/2003 [^] [^^] [^^^] [ответить]
| +/– |
Ты не путай перехват системных вызовов с библиотечными вызовами. Хотя даже вызов open() не являеться прямым системным вызовом, а всего лишь обертка из libc для настоящего системного вызова, все равно остаеться возможность написания программы с использованием прямых системных вызовов, тогда тебе не получиться перехватить его.
К примеру, у нас перехват вызовов по принципу LD_PRELOAD и мы что-то ужасное прячем от любопытных глаз. Но тут админ качает злую прогу, которая не юзает libc (не обязательно вообще не юзать, можно например весь движок написать на библиотечных функчиях, а вот функции поиска файла написать самому, без libc) и находит наш секрет.
Вот так вот.
И вообще, так все ногти об клавиатуру сломать можно, надоело. | |
|
|
2.9, Bob (?), 15:59, 28/12/2003 [^] [^^] [^^^] [ответить]
| +/– |
Судя по сообщениям на форуме www.thc.org, в ядре 2.6.0 таблица системных вызовов экспорту не подлежит, cледовательно, приведенные примеры перехвата системных вызовов при помощи модулей в ядре 2.6.0 работать не будут. | |
|
3.10, JonnyPronks (?), 16:29, 28/12/2003 [^] [^^] [^^^] [ответить]
| +/– |
в 2.6 изменилась инизиализация модуля и выглядит примерно так:
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
static int hello_init(void)
{
printk("Hello, world\n");
return 0;
}
static void hello_exit(void)
{
printk( "Goodbye, cruel world\n");
}
module_init(hello_init);
module_exit(hello_exit);
MODULE_LICENSE("Dual BSD/GPL");
но у меня что-то не компилируется даже такой простой модуль, если указывать нестандартную библиотечную директорию (-I параметр). Появляются ошибки типа:
In file included from /usr/src/linux/include/linux/jiffies.h:6,
from /usr/src/linux/include/linux/sched.h:12
если же не указывать директорию с headerami то компиляция проходит удачно, но при запуске млдуля появляется очередная ошибка:
insmod: error inserting 'hello.o': -1 Invalid module format
| |
|
4.14, Soldier (?), 21:14, 30/12/2003 [^] [^^] [^^^] [ответить]
| +/– |
>в 2.6 изменилась инизиализация модуля и выглядит примерно так:
>#include <linux/init.h>
>#include <linux/module.h>
>#include <linux/kernel.h>
>static int hello_init(void)
>{
> printk("Hello, world\n");
> return 0;
>}
>static void hello_exit(void)
>{
> printk( "Goodbye, cruel world\n");
>}
>module_init(hello_init);
>module_exit(hello_exit);
>MODULE_LICENSE("Dual BSD/GPL");
>
>но у меня что-то не компилируется даже такой простой модуль, если указывать
>нестандартную библиотечную директорию (-I параметр). Появляются ошибки типа:
>In file included from /usr/src/linux/include/linux/jiffies.h:6,
>
> from /usr/src/linux/include/linux/sched.h:12
>если же не указывать директорию с headerami то компиляция проходит удачно, но
>при запуске млдуля появляется очередная ошибка:
>insmod: error inserting 'hello.o': -1 Invalid module format
А я его кажись победил...
//=========== hello.c =====================
#include <linux/module.h>
int init_module(void) {
printk("Hello World\n");
return 0;
}
void cleanup_module(void) {
printk("Bye\n");
}
//=========================
Компилировал так:
gcc -c -DMODULE -D__KERNEL__ -I/usr/src/linux/include -I/usr/src/linux/include/asm/mach-default -DKBUILD_MODNAME=hello -c hello.c
Модуль откомпилился и вставился. Правда пришлось посадить module-init-tools-3.0-pre3 вдобавок к modutils 2.4.15 Но это уже отдельная история :)))
| |
|
5.15, JonnyPronks (?), 17:21, 05/01/2004 [^] [^^] [^^^] [ответить]
| +/– |
У меня так не получилось, вот обновля ка я module-init-tools тоже посмотрим что скажет.. | |
|
|
|
|
|