mmap на / proc / pid / mem

Кому-нибудь удалось создать файл / proc / pid / mem с помощью ядра Linux 2.6? Я получаю ошибку ENODEV (нет такого устройства). Мой звонок выглядит так:

char * map = mmap(NULL, PAGE_SIZE, PROT_READ, MAP_SHARED, mem_fd, offset);

И я убедился, посмотрев на файл / proc / pid / maps во время отладки, что, когда выполнение достигает этого вызова, смещение имеет значение вершины стека минус PAGE_SIZE. Я также проверил с помощью ptrace, что mmap устанавливает для errno значение ENODEV.


person Amittai Aviram    schedule 07.03.2011    source источник


Ответы (1)


См. proc_mem_operations в /usr/src/linux/fs/proc/base.c: /proc/.../mem делает не поддерживает mmap.

person ephemient    schedule 07.03.2011
comment
Большое спасибо! Кажется, у меня нет этого файла base.c в моем Ubuntu x86_64 - мой каталог / usr / src пуст. Какой дистрибутив у вас установлен? - person Amittai Aviram; 09.03.2011
comment
@Amittai: Вы можете установить пакет linux-source или получить исходный код ядра Linux самостоятельно прямо с kernel.org. - person ephemient; 09.03.2011