
OS에서 프로세스마다 다른 주소 공간(address space)을 할당한다. 이때 모든 프로세스는 독립적인 가상 주소 공간을 가지기 때문에, 서로 다른 프로세스에서도 동일한 가상 주소값이 나타날 수 있다.
해당 기능을 테스트하기 위한 간단한 c 코드이다.
다른 프로세스가 동일한 메모리 주소값을 가지는 것은 보안적으로 위험하기때문에 보통 address-space randomization 이라는 기능이 default로 true로 되있어 보통은 메모리 주소값이 동일하지 않게 처리된다. 필자는 해당 기능을 끈뒤 테스트 하였다.
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
int main(int argc, char *argv[]){
int *p = malloc(sizeof(int));
assert(p != NULL);
printf(" (%d) address pointed to by p: %p\n", getpid(), p);
*p = 0;
while (1) {
sleep(1);
*p = *p + 1;
printf(" (pid: %d) p: %d\n", getpid(), *p);
}
return 0;
}
(pid: 15927) address pointed to by p: 0x5555555592a0
(pid: 15928) address pointed to by p: 0x5555555592a0
(pid: 15927) p: 1
(pid: 15928) p: 1
(pid: 15927) p: 2
(pid: 15928) p: 2
...
확인하면 두 프로세스 15927, 15928 의 프로세스가 동일한 메모리 주소값을 가지는 것을 알 수 있다.