2012-01-03 1 views
8

나는 창문과 DLL에 대해 공부하고 있는데 그것에 대해 몇 가지 질문이있다. :)DLL은 항상 동일한 기본 주소를 사용합니까?

나는 내 자신의 DLL을로드하는 간단한 프로그램을 만들었습니다. 이 DLL은 단순한 함수 플러스 마이너스를가집니다.

이것은 질문입니다. 일부 DLL (예 : text.dll)을로드하면이 DLL은 항상 동일한 기본 주소를 갖게됩니까? 다시 시작하면 변경됩니까? DLL의 기본 주소를 유지할 수 있습니까?

나는 그것을 테스트 할 때 항상 동일한 기본 주소를 가지고 있지만 이것에 대해해야 할 때 DLL 기본 주소에 대한 예외를 만들어야한다고 생각합니다.

답변

11

운영 체제는 원하는 기본 주소로 DLL을로드합니다. "선호하는"기본 주소를 지정할 수는 있지만 어떤 이유로 든 (제어가 완전히 불가능한 경우) DLL이 운영 체제에 의해 운영되는 주소로 이동됩니다 시스템이 적합하다고 봅니다.

+1

ASLR은 적극적으로 다른 위치에 DLL을 넣으려고 시도합니다. –

+0

내 질문에 대답 해 주셔서 감사합니다 :) – Nagi

+0

물론, 아무 문제 없습니다. "받아 들일"것을 망설이지 마라. –

5

일부 DLL (예 : text.dll)을로드합니다.이 DLL은 항상 동일한 기본 주소를 사용합니까?

아니요. 선호하는 기본 주소입니다. 그 주소에 무언가가 이미로드되어있는 경우, 로더는 주소를 리베이스하고 모든 주소를 수정합니다.

Address Space Layout Randomization과 같은 다른 것들은 프로세스가 시작될 때마다 다를 수 있습니다.

+0

+1 - 고정 주소를 보장하는 것은 불가능하지만 http://blogs.msdn.com/b/winsdk/archive/2009/11/30/how-to-disable-address의 기술을 통해 요청할 수 있습니다. -space-layout-randomization-aslr.aspx –

+0

감사합니다. 나는 그것을 이해했다. – Nagi

관련 문제