LINUX.ORG.RU

перехват системных вызовов в ядре Linux 2.4


0

0


столкнулся вот с необходимостью перехвата некоторых системных вызовов в ядре Linux. ограничения:
a) все ядра ветки 2.4.x
b) патчить ядро нельзя i.e. должно работать на уже существующей системе с каким-то левым ядром.

AFAIU с самим перехватом проблем не возникает и достаточно подставить свой вызов в sys_call_table. проблема в том, что с какой-то версии ядра, переменная sys_call_table перестала быть публичной -> при прямом обращении к ней через extern void sys_call_table[] "идет unresolved symbol sys_call_table".

пока что нашел IMHO dirty hack навроде:

http://mail.nl.linux.org/kernelnewbies/2002-12/msg00266.html

но такой брутальный подход мне как-то не нравится :-/ может быть есть другие, более оффициальные вариации на эту тему?

// wbr

Re: перехват системных вызовов в ядре Linux 2.4

если все ядра ветки 2.4, то какие проблемы? sys_call_table не экспортируется в 2.6

Chumka ★★★ ()

Re: перехват системных вызовов в ядре Linux 2.4

root@node8$ uname -a
Linux node8 2.4.21-27.ELsmp #1 SMP Wed Dec 1 21:59:02 EST 2004 i686 i686 i386 GNU/Linux

--- module.c ---
#include <linux/module.h>
#include <linux/sched.h>
#include <linux/sys.h>

static int enter_module(void);
static void leave_module(void);

extern void **sys_call_table;

static int
enter_module(void)
{
    int i;

    printk("enter master module\n");
    for (i = 0; i < NR_syscalls; i++) {
        printk("%d = %p\n", i, sys_call_table[i]);
    }

    return 0;
}

static void
leave_module(void)
{
    printk("leave master module\n");
}

MODULE_AUTHOR("foo");
MODULE_DESCRIPTION("foo");
MODULE_LICENSE("GPL");

module_init(enter_module);
module_exit(leave_module);
--- module.c ---

foo@node8$ make
gcc -D__KERNEL__ -DMODULE -I. -I/lib/modules/2.4.21-27.ELsmp/build/include -O2 -Wall -Werror -Wno-unused -c -o module.o module.c
ld -o scall.o -r module.o

root@node8$ modinfo scall.o
filename:    scall.o
description: "foo"
author:      "foo"
license:     "GPL"

root@node8$ insmod scall.o
scall.o: unresolved symbol sys_call_table

// wbr

klalafuda ★☆☆ ()

Re: перехват системных вызовов в ядре Linux 2.4

Можно вот так красиво и интересно (хотя и очень брутально) http://www.phrack.org/phrack/58/p58-0x07

grob ★★★★★ ()

Re: перехват системных вызовов в ядре Linux 2.4

System.map. Грубо, но тоже вариант.

anonymous ()

Re: перехват системных вызовов в ядре Linux 2.4


да уж, брутальность так и прет..
"I love Linux!" (c) joke
впрочем, может и пригодится
всем спасибо :)

// wbr

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