2014-10-02 2 views
0

어디서나 함수를 가져 오는 프로세스의 IAT는 원하는 dll에서 내 보낸 함수의 주소로 채워집니다.IAT- 실제 주소의 dll 포인터?

그러나 가져온 기능에 대한 이러한 포인터는 어떤 주소 공간입니까? 가상 주소 인 경우 가져 오기 프로세스에 자체 가상 공간이 있고 해당 dll 함수가 포함되어 있지 않으므로 의미가 없습니다.

그러나 보호 모드에서는 실제 주소 지정이 허용되지 않으므로 실제 주소가 될 수 없습니다. 뭐라 구요?

+1

http://msdn.microsoft.com/en-us/magazine/bb985992.aspx –

+0

"이 DLL 함수는 그것"? 프로세스가 DLL을로드 할 때 가장 먼저 일어나는 일은 DLL이 프로세스 주소 공간에 매핑된다는 것입니다! –

+1

가상 주소 개념을 잘못 이해합니다. 가상 주소 공간은 전체 프로세스에 대해 생성되며이 프로세스에서로드 된 모든 이미지 및 기타 할당 된 메모리에 대해 공유됩니다. –

답변

1

IAT의 모든 이유는 DLL이 가상 주소 공간의 알 수없는 오프셋에서로드되기 때문입니다. ASLR은 실제로 의도적으로 예측할 수 없습니다. IAT는 점프 테이블 에서에 고정 위치 에서까지의 기능을 예측할 수없는 위치에 제공합니다.

분명히 IAT는 DLL이 프로세스 공간으로로드 된 후에 만 ​​채울 수 있습니다. 이것은 실제로 LoadLibrary에 의해 수행되는 핵심 작업입니다. 실제로 DLL을로드하는 것은 나중에 필요할 때 호출 될 수 있습니다.

관련 문제