The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"'ring 0' и Написание модуля ядра на C/C++"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"'ring 0' и Написание модуля ядра на C/C++" 
Сообщение от proglammer emailИскать по авторуВ закладки on 20-Фев-05, 00:11  (MSK)
Здравствуйте все.
я пытаюсь получить уровень 0 в линуксе на ассемблере,
но поскольку я ламер и не знаю английского - я не могу нормально понять доки по заражению елф(хочу заразить ядро без потери его функциональности).
мне советовали написать модуль к ядру - но я не знаток C/C++, сейчас понемногу изучаю.
боольшая просьба всем тем - у кого есть свободное время и знания C/C++ или Gnu_as - выложить здесь или скинуть на proglammer@inbox.ru код получения уровня 0 на асме(не под виндовс!), или код ЛЮБОГО модуля ядра(2.4-18.3) для линукса(ну пусть он хоть хелло выводит) который можно скомпилить gcc-2.96-110.

большая просьба - дайте код и всё. не надо писать "зайди на коденет.ру там все есть".
заранее ОХРЕНЕННОЕ спасибо всем кто сможет помочь.
и извиняюсь - но отвечать здесь кому либо смогу нескоро т.к. вкалываю грузчиком и времени ОЧЕНЬ мало.
в качестве платы за вашу щедрость моду дать поюзать мой hex - редактор, ом довольно сырой(пишу часика по два в день, когда не сплю и не работаю :) ).
вот он - leaker.narod.ru/hewr.rar

также буду благодарен всем кто даст ссылки на русские хелпы по ELF формату.

  Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "'ring 0' и Написание модуля ядра на C/C++" 
Сообщение от proglammer emailИскать по авторуВ закладки on 20-Фев-05, 00:16  (MSK)
господи... не "моду" а могу, и не "ом" а он.
  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "'ring 0' и Написание модуля ядра на C/C++" 
Сообщение от Vadim emailИскать по авторуВ закладки(??) on 20-Фев-05, 13:51  (MSK)
>господи... не "моду" а могу, и не "ом" а он.
Ага. А я ставлю пиво тому, кто мне объяснит, что такое ring0 в линуксе.
  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "'ring 0' и Написание модуля ядра на C/C++" 
Сообщение от Murr Искать по авторуВ закладки(??) on 20-Фев-05, 17:37  (MSK)
mymodule.c
--->
#define __KERNEL__
#define MODULE

#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>

static int mymodule_init() {
    printk("hello,world\n");
    return 0;
}

static void mymodule_done() {
}

module_init();
module_exit();

--->

gcc -I/lib/modules/`uname -r`/build include mymodule.c -o mymodule.o -c

--->

Если хочешь получить ассемблерный код, то замени "-c" на "-s". :)

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "'ring 0' и Написание модуля ядра на C/C++" 
Сообщение от Murr Искать по авторуВ закладки(??) on 20-Фев-05, 17:38  (MSK)
Пардон "-c" на "-S", конечно же.
  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "'ring 0' и Написание модуля ядра на C/C++" 
Сообщение от proglammer emailИскать по авторуВ закладки on 21-Фев-05, 11:56  (MSK)
gcc -I/lib/modules/`uname -r`/build include mymodule.c -o mymodule.o -c
выдает: "gcc: cannot specify -o with -c or -S and multiple compilations"
----------
gcc -I/lib/modules/`uname -r`/build mymodule.c -o mymodule.o -c
выдает:
In file included from mymodule.c:5:
/usr/include/linux/module.h:60: parse error before `atomic_t'
/usr/include/linux/module.h:60: warning: no semicolon at end of struct or union
/usr/include/linux/module.h:60: warning: no semicolon at end of struct or union
/usr/include/linux/module.h:62: parse error before `}'
/usr/include/linux/module.h:62: warning: data definition has no type or storage class
/usr/include/linux/module.h:91: parse error before `}'
----------
закомментил
union
{ atomic_t usecount;
  long pad;
} uc;
в module.h

gcc выдал:
/tmp/ccaA55N7.s: Assembler messages:
/tmp/ccaA55N7.s:38: Error: missing expression
/tmp/ccaA55N7.s:40: Error: missing expression

я так понял - у меня говеный glibc-kernheaders*rpm   ?
или что?

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "'ring 0' и Написание модуля ядра на C/C++" 
Сообщение от Murr Искать по авторуВ закладки(??) on 21-Фев-05, 13:38  (MSK)
>gcc -I/lib/modules/`uname -r`/build include mymodule.c -o mymodule.o -c

gcc -I/lib/modules/`uname -r`/build/include mymodule.c -o mymodule.o -c

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "'ring 0' и Написание модуля ядра на C/C++" 
Сообщение от proglammer emailИскать по авторуВ закладки on 21-Фев-05, 16:09  (MSK)
Спасибо! :) совсем отупел я от работы, пора увольнятся.
но тут загвоздка:
теперь
gcc -I/lib/modules/`uname -r`/build/include mymodule.c -o mymodule.o -c
выдает:
/tmp/ccQKp19t.s: Assembler messages:
/tmp/ccQKp19t.s:38: Error: missing expression
/tmp/ccQKp19t.s:40: Error: missing expression
--------
я сделал так
gcc -I/lib/modules/`uname -r`/build/include mymodule.c -o mymodule.o -S
и исправил строчки 38/40
с .set init_module,
.globl cleanup_module
.set cleanup_module,

на .set init_module,0
.globl cleanup_module
.set cleanup_module,1
и попытался скомпилить
вот что выдал ld
ld: warning: cannot find entry symbol _start; defaulting to 08048074
a.out: In function `mymodule_init':
a.out(.text+0xf): undefined reference to `printk'

:(

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "'ring 0' и Написание модуля ядра на C/C++" 
Сообщение от Lamr emailИскать по авторуВ закладки on 21-Фев-05, 17:20  (MSK)
>>gcc -I/lib/modules/`uname -r`/build include mymodule.c -o mymodule.o -c
>
>gcc -I/lib/modules/`uname -r`/build/include mymodule.c -o mymodule.o -c

Чё, Murr, на пиво заработать решил?

:-))

ну-ну

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

9. "'ring 0' и Написание модуля ядра на C/C++" 
Сообщение от proglammer Искать по авторуВ закладки on 22-Фев-05, 16:48  (MSK)
:) !!!!!
спасибо пиплы!
допер! радости полные штаны блин!!!!

всего-то
gcc -I/lib/modules/`uname -r`/build/include mymodule.c -o 0.s -S
-----------------------0.s:
.set init_module,0
.globl cleanup_module
.set cleanup_module,0
-----------------------
gcc -I/lib/modules/`uname -r`/build/include 0.s -o mymodule.o -c

все работает - вот тока insmod выдает:
Warning: loading mymodule.o will taint the kernel: no license

как от этого избавится а?

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

10. "'ring 0' и Написание модуля ядра на C/C++" 
Сообщение от proglammer emailИскать по авторуВ закладки on 22-Фев-05, 18:21  (MSK)
ну все! разобрался.
короче для всех ламеров вроде меня выкладываю сл. код:
файл mymod.c
------------------------------
#define __KERNEL__
#define MODULE
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/init.h>
#define DRIVER_AUTHOR "автор модуля"
#define DRIVER_DESC   "описание модуля"

static int __init init_fisrt_mod(void)
{
        printk(KERN_ALERT "Hello, world!\n");
        return 0;
}

static void __exit cleanup_fisrt_mod(void)
{
        printk(KERN_ALERT "Goodbye, world.\n");
}

module_init(init_fisrt_mod);
module_exit(cleanup_fisrt_mod);

MODULE_LICENSE("GPL");
/*
*эта хрень не дает insmod-у выводить:
Warning: loading mymodule.o will taint the kernel: no license
*/

а то что ниже я пока не пробовал
// MODULE_AUTHOR(DRIVER_AUTHOR);    /* Автор модуля */
// MODULE_DESCRIPTION(DRIVER_DESC); /* Назначение модуля */
---------------------------------
чтобы это скомпилить должен быть установлен kernel-source*.rpm
компилить так:
gcc -I/lib/modules/`uname -r`/build/include mymod.c -o mymod.o -c
---------------------------------
а те кто в С/С++ ноль, а в асме крут - делают так:

gcc -I/lib/modules/`uname -r`/build/include mymod.c -o 0.s -S
#дальше редактируем файл 0.s:
#и компилим дальше
gcc -I/lib/modules/`uname -r`/build/include 0.s -o mymod.o -c

блин ну и долго`ж я мудился....


  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

11. "'ring 0' и Написание модуля ядра на C/C++" 
Сообщение от Simps Искать по авторуВ закладки(ok) on 22-Фев-05, 19:25  (MSK)
>ну все! разобрался.
>короче для всех ламеров вроде меня выкладываю сл. код:
>файл mymod.c
>------------------------------
>#define __KERNEL__
>#define MODULE
>#include <linux/module.h>
>#include <linux/kernel.h>
>#include <linux/init.h>
>#define DRIVER_AUTHOR "автор модуля"
>#define DRIVER_DESC   "описание модуля"
>
>static int __init init_fisrt_mod(void)
>{
>        printk(KERN_ALERT "Hello, world!\n");
>        return 0;
>}
>
>static void __exit cleanup_fisrt_mod(void)
>{
>        printk(KERN_ALERT "Goodbye, world.\n");
>}
>
>module_init(init_fisrt_mod);
>module_exit(cleanup_fisrt_mod);
>
>MODULE_LICENSE("GPL");
>/*
>*эта хрень не дает insmod-у выводить:
>Warning: loading mymodule.o will taint the kernel: no license
>*/
>
>а то что ниже я пока не пробовал
>// MODULE_AUTHOR(DRIVER_AUTHOR);    /* Автор модуля */
>// MODULE_DESCRIPTION(DRIVER_DESC); /* Назначение модуля */
>---------------------------------
>чтобы это скомпилить должен быть установлен kernel-source*.rpm
>компилить так:
>gcc -I/lib/modules/`uname -r`/build/include mymod.c -o mymod.o -c
>---------------------------------
>а те кто в С/С++ ноль, а в асме крут - делают
>так:
>
>gcc -I/lib/modules/`uname -r`/build/include mymod.c -o 0.s -S
>#дальше редактируем файл 0.s:
>#и компилим дальше
>gcc -I/lib/modules/`uname -r`/build/include 0.s -o mymod.o -c
>
>блин ну и долго`ж я мудился....

Да ты уже гуру в вопросе написания модулей для ядра =)

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

12. "'ring 0' и Написание модуля ядра на C/C++" 
Сообщение от proglammer emailИскать по авторуВ закладки on 24-Фев-05, 21:19  (MSK)
>Да ты уже гуру в вопросе написания модулей для ядра =)

:)

нее до гуру мне оччень далеко...
я в осносном asm мучаю, и вообщем еще один вопрос - как из модуля запустить программу.
я хотел через execve("/bin/prog");, execl и т.д. но во первых -
insmod выдает:
mymod.o: unresolved symbol execve
и во вторых ведь при execve код вызвавшегоо процесса перезапишется, а ето лажа...
ну а с fork-ом я конкретно обломался, как только вызвал - ядро повисло.
а попытавшись сделать execve через асм
pushl $0x7672732f      #/srv - запускаемая прога
movl %esp,%ebx
movl $11,%eax
xorl    %ecx,%ecx
xorl    %edx,%edx
int $0x80
опять обломался - ничего не произошло....

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

14. "'ring 0' и Написание модуля ядра на C/C++" 
Сообщение от Murr Искать по авторуВ закладки(??) on 25-Фев-05, 20:42  (MSK)
>pushl $0x7672732f      #/srv - запускаемая прога

Строки должны быть 0-завершенные. В ядре используются ASCIIZ строки.

>movl %esp,%ebx
>movl $11,%eax
>xorl    %ecx,%ecx
>xorl    %edx,%edx
>int $0x80
>опять обломался - ничего не произошло....

В ядре нужно быть очень аккуратным при попытках из ядра делать вещи, завязанные на контекст текущего процесса/нити. К тому же, не забывай, что если ты дергаешь ядреные функции не напрямую, а через intx80, то ты тем самым портишь стек ядра (если ты сделаешь это из init функции, то модуль не завершит инициализацию).

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

15. "'ring 0' и Написание модуля ядра на C/C++" 
Сообщение от proglammer emailИскать по авторуВ закладки on 26-Фев-05, 20:05  (MSK)
>В ядре нужно быть очень аккуратным при попытках из ядра делать вещи,
>завязанные на контекст текущего процесса/нити. К тому же, не забывай, что
>если ты дергаешь ядреные функции не напрямую, а через intx80, то
>ты тем самым портишь стек ядра (если ты сделаешь это из
>init функции, то модуль не завершит инициализацию).

а из какой функции это делать?("main(){}"?), как вызывать функции напрямую,
и как можно запустить прогу не испортив стек ядра?
хочется знать все и сразу. :)

ставлю виртуальную бутылку пива всем участникам беседы. :)

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

16. "'ring 0' и Написание модуля ядра на C/C++" 
Сообщение от majordomo emailИскать по авторуВ закладки on 26-Фев-05, 22:06  (MSK)
>>В ядре нужно быть очень аккуратным при попытках из ядра делать вещи,
>>завязанные на контекст текущего процесса/нити. К тому же, не забывай, что
>>если ты дергаешь ядреные функции не напрямую, а через intx80, то
>>ты тем самым портишь стек ядра (если ты сделаешь это из
>>init функции, то модуль не завершит инициализацию).
>
>а из какой функции это делать?("main(){}"?), как вызывать функции напрямую,
>и как можно запустить прогу не испортив стек ядра?
>хочется знать все и сразу. :)
>
>ставлю виртуальную бутылку пива всем участникам беседы. :)


static void call(void* dummy){
    int rv;
    static char * envp[] = { "HOME=/", "TERM=linux", "PATH=/sbin:/usr/sbin:/bin:/usr/bin", NULL };
    char *argv[] = { "/sbin/watchdog", NULL };
    rv = call_usermodehelper(argv[0],argv,envp,0);
// можно что-нибудь сделать с rv...
}

static DECLARE_WORK(work,call,0);

void func() // где-то внутри модуля
{
    schedule_work(&work);
}

static void __exit fini(void) // при выгрузке модуля
{
        flush_scheduled_work();
}

Код для 2.6, в 2.4 немного по-другому... В прошлом году мне на Lor подсказали, для iptables расширение писал, там и для 2.4 пример остался...

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

17. "'ring 0' и Написание модуля ядра на C/C++" 
Сообщение от proglammer emailИскать по авторуВ закладки on 27-Фев-05, 21:21  (MSK)
>Код для 2.6, в 2.4 немного по-другому...
а у меня какраз 2.4-18.3
да и скомпилить не получилось :(
асм всетаки проще...
и в модуле всего 2-е функции чтоли?(__init и __exit)
я попробовал между ними " main(){ printk(KERN_ALERT "work.\n");} " вставить,
и ничего не вышло.
блин из меня программер как из горбачева балерина.
а "Lor" это что за форум? - я на lor.ru зашел так это сайт оториноларингологии! оказался :)

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

18. "'ring 0' и Написание модуля ядра на C/C++" 
Сообщение от majordomo emailИскать по авторуВ закладки on 27-Фев-05, 22:14  (MSK)
>>Код для 2.6, в 2.4 немного по-другому...
>а у меня какраз 2.4-18.3
>да и скомпилить не получилось :(
>асм всетаки проще...
>и в модуле всего 2-е функции чтоли?(__init и __exit)
>я попробовал между ними " main(){ printk(KERN_ALERT "work.\n");} " вставить,
>и ничего не вышло.
>блин из меня программер как из горбачева балерина.
>а "Lor" это что за форум? - я на lor.ru зашел так
>это сайт оториноларингологии! оказался :)

1) Почитайте литературу по ядру линукса, хотя бы вот это:
http://jamesthornton.com/linux/lkmpg/

2) lor == linux.org.ru
Вот ссылка на нужный тред:
http://www.linux.org.ru/profile/majordomo//view-message.jsp?msgid=536574
см. сообщение от idle 20.04.2004 18:09:13, да и вообще вес тред познавательный 8)

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

19. "'ring 0' и Написание модуля ядра на C/C++" 
Сообщение от Link emailИскать по авторуВ закладки(??) on 27-Фев-05, 22:38  (MSK)
>блин из меня программер как из горбачева балерина.

Вы бы для начала почитали хоть какую-нить плохонькую теорию, представление получили, над чем вообще работаете. А то всё это сильно напоминает шаманские пляски с бубном под мухоморами.

Вот, например, замечательная книжка Морриса Баха,"Архитектура ОС UNIX"
http://coolsoft.ru/lib/unix.txt.tgz

( смотреть можно так: tar zxfO unix.txt.tgz | less )

И вообще, завязывайте с линухом возюкаться - это мода, впустую время потратите.
ИМХО
beastie.ru

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

20. "'ring 0' и Написание модуля ядра на C/C++" 
Сообщение от proglammer emailИскать по авторуВ закладки on 27-Фев-05, 23:19  (MSK)
>1) Почитайте литературу по ядру линукса, хотя бы вот это:
>http://jamesthornton.com/linux/lkmpg/
я совершенно не знаю английского.
а на lor сходил - хелпов там куча, буду читать.

> И вообще, завязывайте с линухом возюкаться - это мода, впустую время
>потратите.
> ИМХО
>beastie.ru
книжку ессно скачал и буду читать.
а про linux/unix споров много - на вкус и цвет товарищей нет.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

21. "'ring 0' и Написание модуля ядра на C/C++" 
Сообщение от majordomo emailИскать по авторуВ закладки on 28-Фев-05, 00:10  (MSK)
>>1) Почитайте литературу по ядру линукса, хотя бы вот это:
>>http://jamesthornton.com/linux/lkmpg/
>я совершенно не знаю английского.

Это не кошерно. Самые интересные доки как обычно не на русском 8)

Посмотрите еще вот это:
http://www.opennet.me/openforum/vsluhforumID3/4560.html

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

22. "'ring 0' и Написание модуля ядра на C/C++" 
Сообщение от proglammer emailИскать по авторуВ закладки on 28-Фев-05, 12:44  (MSK)
>Посмотрите еще вот это:
>http://www.opennet.me/openforum/vsluhforumID3/4560.html

:)
а вот по русски - это дело! буду читать ессно!
Спасиба всем! а именно Murr-у majordomo и Link-у!

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх

13. "'ring 0' и Написание модуля ядра на C/C++" 
Сообщение от Murr Искать по авторуВ закладки(??) on 25-Фев-05, 20:31  (MSK)
> Чё, Murr, на пиво заработать решил?
>
> :-))
>
> ну-ну


На пиво мне в отличие от некоторых и зарплаты хватает.
Насчет того кода - руки решил размять.

  Удалить Правка | Высказать мнение | Ответить | Рекомендовать в FAQ | Cообщить модератору | Наверх


Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру