2011-05-07 2 views
1

동일한 프로그램의 두 인스턴스를 시작한다고 가정합니다. 두 프로그램의 텍스트 영역에 동일한 가상 주소가 있습니까?가상 주소

답변

0

아마도 그렇지는 않지만 가능할 수도 있습니다. 각 프로세스에는 자체 메모리 공간이 있습니다.

1

에 따라 다릅니다. 대부분의 시스템에서 동일한 환경 (동일한 매개 변수 등)에서 동일한 프로그램을 두 번 실행하면 동일한 주소 매핑을 찾을 수 있습니다. 이것은 프로세스의 대부분이 결정적이며 환경, 명령 행 매개 변수, 읽는 파일의 내용에만 의존하지만 날짜 또는 프로세스 ID와 같은 변경 데이터에는 의존하지 않기 때문입니다. 이는 디버깅 할 때 매우 유용합니다. 프로그램을 다시 시작하면 작은 코드를 변경하고 다시 컴파일 한 후에도 메모리 레이아웃이 동일하게 유지 될 가능성이 있습니다. 물론, 동시에 실행되는 프로그램의 다른 인스턴스는 동일한 가상 주소를 가질 수 있지만 동일한 물리적 주소를 갖지는 않습니다.

OpenBSD 또는 다양한 보안 설정을 가진 Linux와 같은 일부 시스템에서는 address space layout randomization (ASLR)을 구현합니다. ASLR은 프로세스가 시작될 때마다 코드, 데이터, 스택 및 힙의 가상 주소가 무작위로 결정된다는 것을 의미합니다. 이 보안 기능은 보안 취약성을 악용하는 것을 어렵게 만듭니다. 악용 코드는 알려진 주소의 알려진 코드에 액세스 할 수 없습니다. 그러나 ASLR이 대중화되면서 악용은 더욱 정교 해져서 해결됩니다. ASLR은 많은 복잡성을 추가하지 않고 익스플로잇 작성자의 작업 부하를 증가시키기 때문에 유용합니다.