我已经玩过一些/proc/pid/mem
和/proc/pid/maps
。我编写了一个简单的 C 程序,它只是定期从变量读取(其地址写入标准输出),并且我能够使用dd
.
#include <stdio.h>
#include <unistd.h>
int main() {
pid_t pid = getpid();
int value = 5;
do {
printf("value: %d\naddress: %p\npid: %d\n", value, &value, pid);
} while (getchar() != -1);
return 0;
}
echo '0x2a000000' | xxd -p -r | dd of=/proc/$PID/mem bs=1 seek=$((ADDR)) count=4 conv=notrunc
当我在第一个程序中按 Enter 键时,该值会更新为 42。
所以我的问题是,为什么这不是问题?我什至没有root权限。如果我在计算机上安装了恶意软件,它就可以读取/写入任何程序的内存。
即使您不知道变量的确切地址,您仍然可以使用 的地址打印出整个堆栈和堆/proc/pid/maps
。