OS virtual memory address

coding enthusiast·2024년 11월 28일

os

목록 보기
1/1
post-thumbnail

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 의 프로세스가 동일한 메모리 주소값을 가지는 것을 알 수 있다.

profile
코프링조아

0개의 댓글