나는 몇몇 /proc/pid/mem
과 /proc/pid/maps
. 나는 변수에서 주기적으로 읽는 간단한 C 프로그램(해당 주소는 stdout에 기록됨)을 작성했으며 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로 업데이트됩니다.
그래서 내 질문은, 이것이 왜 문제가 되지 않는가 하는 것입니다. 루트 액세스 권한도 없습니다. 내 컴퓨터에 악성 코드를 설치하면 모든 프로그램의 메모리를 읽고 쓸 수 있습니다.
변수의 정확한 주소를 모르더라도 주소를 사용하여 전체 스택과 힙을 인쇄할 수 있습니다 /proc/pid/maps
.