2013-12-26 2 views
1

Просто запутался, когда я изучаю систему виртуальной памяти в Linux.Как процесс может попытаться получить доступ к памяти другого процесса в системе виртуальной памяти Linux

Поскольку каждый процесс имеет собственное виртуальное адресное пространство и собственную таблицу страниц, переводя его виртуальный адрес в физический адрес (я прав?), Как он может попытаться ошибочно получить доступ к памяти другого процесса? В таблице страниц не должно быть записей, верно?

ответ

1

Если не указано иное, не должно быть виртуального адреса, к которому может получить доступ один процесс, который будет изменять память, назначенную другому процессу.

+0

Привет, спасибо за Ваш ответ. Понимаю. –

8

Процесс linux может получить доступ к памяти другого процесса через специальный файл/proc/pid/mem. Например, вот небольшая программа вызов poke:

#include <fcntl.h> 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <sys/types.h> 
#include <unistd.h> 

int main(int ac, char **av) { 
    char name[64]; 
    int    fd; 
    if (ac != 3) { 
     fprintf(stderr, "usage: %s pid address value\n", av[1]); 
     exit(1); } 
    sprintf(name, "/proc/%.10s/mem", av[1]); 
    if ((fd = open(name, O_WRONLY)) < 0) { 
     fprintf(stderr, "Can't access pid %s", av[1]); 
     perror(":"); 
     exit(1); } 
    lseek(fd, strtol(av[2], 0, 0), SEEK_SET); 
    if (write(fd, av[3], strlen(av[3])) < 0) 
     perror("write"); 
    return 0; 
} 

Оно записывает строку в память другого процесса (возможно, приводящей к краху) ...

+1

Обратите внимание, что это работает, только если процесс, выполняющий этот код, имеет доступ на запись к/proc/pid/mem. В моей системе/proc и ее содержимое принадлежат root и помечены только для чтения, поэтому большинству процессов не удается это сделать. Базовая безопасность ОС - и надежность - требования требуют, чтобы процессы не могли гасить друг с другом, если у них нет специального разрешения или привилегий на уровне ОС. – keshlam

+0

@keshlam: да, open может завершиться ошибкой, поэтому важно проверить возвращаемое значение для ошибок ... –

Смежные вопросы