2014-04-28 1 views
0

DLL은 실제로 한 번만로드됩니다. 동적 로더는 응용 프로그램이 특정 DLL (예 : MS-Office)의 사용을 시작하면 호출을 연결하고 리디렉션합니다.DLL 로딩 및 시스템 이미지 공간

그러나 WHEN은 시스템에서 여러 다른 사용자 및 응용 프로그램에 대한 DLL을 반복적으로 참조하여 모든 응용 프로그램에서 사용할 수 있도록 시스템 이미지 공간에 DLL 이미지를 푸시합니까?

그렇지 않으면로드 된 이미지가 사용자 공간에 남아 있습니까?

마음에 베어링 : 링커가 항상 커널 공간에 DLL을로드가 그렇게 모든 응용 프로그램은 실제로 같은 2기가바이트 시스템 공간에서보고,이 주소 가상으로 그들을 위해 가상화되고,

OR, 모든 애플 리케이션 그들을 사용할 수 있습니다.

답변

2

DLL은 실제로 한 번만로드됩니다.

올바르지 않습니다. 이들은 운영 체제의 로더에 의해 프로세스가 시작될 때 또는 LoadLibrary와 같은 API 함수를 통해 요청할 때 가상 주소 공간에 매핑됩니다. 각 프로세스는 새로운 복사본을 가져오고 DLL은 초기화 될 때마다 초기화됩니다.

모든 프로세스가 동시에 사용하는 글로벌 "시스템 공간"이 없습니다. 각 프로세스는 고유 한 가상 주소 범위 (32 비트 Windows에서는 일반적으로 2GB의 사용 가능한 메모리가있는 4GB입니다)가 있습니다. 자신의 가상 메모리에있는 DLL의 일부를 덮어 쓰면 다른 프로세스의 DLL 복사본에 영향을주지 않습니다. 하나의 프로세스로 인해 전체 시스템이 쉽게 손상 될 수 있습니다.