2010-03-03 34 views
5

Tôi đang cố gắng ghi đè các phần nhất định trong bộ nhớ hạt nhân (Linux 2.6.31, Ubuntu 9.10) trong máy ảo (sử dụng VirtualBox) qua mô-đun hạt nhân. Bất cứ khi nào tôi làm điều này tôi nhận được lỗi nàyKhông thể ghi vào bộ nhớ hạt nhân qua mô-đun hạt nhân Linux (Ubuntu)

[27.154,303726] BUG: không thể xử lý yêu cầu kernel phân trang ở 0xc05769bc

Mã của tôi:

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; 

Địa chỉ là đúng và vì vậy là viết mã của tôi. Tôi chỉ sử dụng một con trỏ để ghi vào bộ nhớ hạt nhân. Tôi đã tự hỏi tại sao tôi nhận được thông báo này vì trang bộ nhớ của địa chỉ đó chắc chắn nằm trong bộ nhớ.

Hành vi này có liên quan đến máy ảo không? Hoặc làm hạt nhân gần đây có một số loại bảo vệ được xây dựng trong? Tôi hy vọng ai đó có thể cho tôi một số đầu mối.

Sự cố có vẻ liên quan đến Ubuntu, vì cùng một mã không bị lỗi khi sử dụng Debian.

TIA!

Willem

+0

Debian trong VM hoặc độc lập? –

+0

Debian cũng trong VM (VirtualBox) –

Trả lời

2

Nhân gần đây làm cho phần văn bản của họ chỉ đọc - những gì được cho là đang sống tại địa chỉ mà bạn đang cố gắng để poke?

+0

Bạn có biết nếu có một cấu hình hạt nhân var để thay đổi các tùy chọn phần văn bản? –

3

ASLR lẽ (Address Space Layout ngẫu nhiên)?

Nó có thể được kiểm soát bởi /proc/sys/kernel/randomize_va_space (echo 0 vào nó nên tắt nó đi).

Các vấn đề liên quan