Не мог записать в памяти ядра через модуль ядра Linux (Ubuntu)

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

[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

5
задан 3 March 2010 в 20:52
поделиться

2 ответа

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

2
ответ дан 14 December 2019 в 19:10
поделиться

ASLR может быть (Address Space Layout Randomisation) ?

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

3
ответ дан 14 December 2019 в 19:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: