2010-03-03 3 views
5

Я пытаюсь перезаписать определенные части в памяти ядра (Linux 2.6.31, Ubuntu 9.10) на виртуальной машине (используя VirtualBox) через модуль ядра. Всякий раз, когда я делаю это я получаю эту ошибкуНевозможно записать в память ядра через модуль ядра Linux (Ubuntu)

[27154,303726] Ошибка: не в состоянии обработать запрос ядра подкачки на 0xc05769bc

Мой код:

unsigned char *p = (unsigned char *) c05769bc; 
p[1] = (addr & 0x000000ff); 
p[2] = (addr & 0x0000ff00) >> 8; 
p[3] = (addr & 0x00ff0000) >> 16; 
p[4] = (addr & 0xff000000) >> 24; 

Адрес прав и мой код записи. Я просто использую указатель для записи в память ядра. Мне было интересно, почему я получаю это сообщение, поскольку страница памяти этого адреса определенно находится в памяти.

Имеет ли это поведение какое-либо отношение к виртуальной машине? Или у последнего ядра есть встроенная защита? Надеюсь, кто-то подскажет мне кое-что.

Проблема, похоже, связана с Ubuntu, поскольку тот же код не сбой с использованием Debian.

TIA!

Willem

+0

Debian в VM или автономном режиме? –

+0

Debian также в VM (VirtualBox) – 2010-03-03 20:52:16

ответ

2

Недавние ядра делают свой текстовый раздел доступным только для чтения - что должно жить по адресу, который вы пытаетесь высунуть?

+0

Знаете ли вы, есть ли конфигурация ядра var для изменения параметров текстового раздела? – 2010-03-04 14:56:03

3

ASLR возможно (Address Space Layout Рандомизация)?

Управление может осуществляться с помощью /proc/sys/kernel/randomize_va_space (эхо-сигнал 0 в него должен отключить его).