2016-07-03 3 views
2

windbg를 사용하여 Windows 10 컴퓨터에서 프로그램을 실행하고 초기 중단 점을 중단시킵니다. 나는 스택의 물리적 바닥 (TEB의 stackBase) 주소를 가져오고 rsp 값을 뺀 ntdll!LdrInitializeThunk을 뺍니다. 난 그냥 같은 프로그램이 5 번했고, 나는 5 개 개의 다른 값을 가지고 : 이것은 스택의 "논리적 하단의"제안이 ntdll!RtlUserThreadStart와 동일한 작업을 수행하는 경우왜 스택의 "논리적 하단"과 "물리적 하단"의 오프셋이 무작위입니까?

0x600 
0x9f0 
0xa40 
0x5d0 
0x570 

당신은 등, 비슷한 결과를 얻을 수를 다소 임의적이다. 왜 그런가요? 이것은 스택 내부에 "미니 ASLR"과 같은 종류입니까? 어디에서 문서화되어 있습니까?

+1

누군가가 자세한 대답을 원했지만 FWIW 프로세스 시작은 본질적으로 예측할 수없는 것 같습니다. Process Monitor를 사용하여 특정 실행 파일이 시작될 때 어떤 일이 일어나는지 살펴 보려면 시간이 지남에 따라 임의로 달라질 수 있습니다. 나는 이유를 정말로 모른다. –

답변

1

Vista의 ASLR (ASLR은 Vista에 도입되었습니다)에 대한 검색 작업을 수행 한 후 시만텍의 this document을 발견했습니다. 5 페이지에서 내 질문에 대한 (강조 광산) 인 현상을 언급 :

스택이 배치되면을 초기 스택 포인터는 더 임의의 점감 양만큼 무작위입니다. 초기 오프셋은

그래서 그것이 (이 방법이 더 어렵 보안상의 이유로 의도적으로 끝낼 것 같습니다 [...] 반 페이지 (2048 바이트)까지 선택된다, 그러나 자연적으로 정렬 된 주소에 제한된다 스택베이스에 상대적인 고정 된 오프셋에있는 것들의 주소를 알아내는 것).

누군가가 더 통찰력있는 답변을 제공 할 수 있기를 바란다. 아무도하지 않으면, 나는이 대답을 받아 들일 것이다.