Hao*_*hen 3 linux virtual-memory
当我在Linux中学习虚拟内存系统时,我感到困惑.
由于每个进程都有自己的虚拟地址空间和自己的页表,将其虚拟地址转换为物理地址(我是对吗?),它怎么可能试图错误地访问其他进程的内存?页面表中应该没有条目,对吧?
Chr*_*odd 12
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;
}
Run Code Online (Sandbox Code Playgroud)
它会将一个字符串写入另一个进程的内存(可能导致它崩溃)......