LINUX.ORG.RU

Адрес syscall table

 ,


2

2

Пишу модуль ядра под разные ОС. Для этого мне нужно использовать адрес таблицы syscall. В ОС с ядром 4.0-x я этот адрес узнавал просто: cat /proc/kallsyms | grep sys_call_table И все что мне надо было на экране. Однако в дистрибутиве Debian 7.8(с ядром 3.2.0-4) вышеуказанная команда не выдает ничего. Подскажите как на этом (и других )дистрибутивах узнать адрес таблицы ?


Если я прав и ты действительно хочешь подменять системные вызовы, может быть этот пример тебе поможет:

#define CR0_WP 0x00010000 // Write Protect Bit

static unsigned long** sys_call_table;
asmlinkage long (*old_sys_open)(const char __user* filename, int flags, umode_t mode);

asmlinkage long new_sys_open(const char __user* filename, int flags, umode_t mode)
{
    // TODO: Add code here
    return 0;
}

static unsigned long** find_sys_call_table(void)
{
    unsigned long int offset = PAGE_OFFSET;
    while(offset < ULLONG_MAX) {
        unsigned long** table = (unsigned long**) offset;
        if(table[__NR_close] == (unsigned long*) sys_close)
            return table;
    
        offset += sizeof(void*);
    }

    return NULL;
}


static int __init interceptor_init(void)
{
    if(!(sys_call_table = find_sys_call_table()))
        return -1;

    unsigned long cr0 = read_cr0();
    write_cr0(cr0 & ~CR0_WP);

    old_sys_open = (void*) sys_call_table[__NR_open];
    sys_call_table[__NR_open] = (unsigned long*) new_sys_open;

    write_cr0(cr0);
    return 0;
}

m0rph ★★★★★
()
Последнее исправление: m0rph (всего исправлений: 2)
Ответ на: комментарий от m0rph

Верно. Только у меня уже все отлажено и все упирается в этот адрес, который не могу найти на некоторых ядрах.

sa1mon
() автор топика
Ответ на: комментарий от m0rph

Как страшно жить! Оно что, не экспотировано и его надо исать ручками по всему .data? o_O

В BSD syscall таблицу просто видно как:

const struct sysent *callp;

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 2)
Ответ на: комментарий от beastie

Как страшно жить!

Вот поэтому заботятся о нашей безопасности. В ядре 4.7 вообще добавили ещё одну фичу для «повышения» безопасности. Побочный эффект: даже если есть исходники к модулю, он может просто не загрузиться, т.к. из работающего ядра удалена «в целях повышения безопасности» вся «лишняя» информация (в смысле не нужная для продавца).

gag ★★★★★
()
Ответ на: комментарий от i82

В смысле, что готового нет, надо садиться и самому писать?

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