"First Thunk"(FT)가 있는데, 실행 후 올바른 주소로 덮어 씁니다.왜 PE에는 원본 첫 번째 상처 (OFT)가 필요합니까?
그러나 PE에서 OFT?
PE도 필요합니까?
"First Thunk"(FT)가 있는데, 실행 후 올바른 주소로 덮어 씁니다.왜 PE에는 원본 첫 번째 상처 (OFT)가 필요합니까?
그러나 PE에서 OFT?
PE도 필요합니까?
가져 오기가 바인딩되어 있지만 가져온 .DLL이 일치하지 않으면 원본 첫 번째 썽크가 필요합니다.
패치되지 않은 새 버전의 Windows에서는 기본 .DLL (ntdll, kernel32, user32 등)에있는 모든 기능의 모든 주소를 알고 있습니다. 예를 들어 shell32를 사용하면 kernel32!CreateProcess
에 연결되고 실제 주소는 CreateProcess
이며 shell32에 직접 저장할 수 있습니다. 이를 import binding이라고하며 로더가 가져온 기능의 모든 주소를 조회하는 단계를 건너 뛸 수 있습니다.
가져온 .DLL이 기본 주소로로드되지 않았거나 .DLL이 변경된 경우 (보안 업데이트 등)에는 작동하지 않습니다. 이 경우 로더가 함수를 "정상적인 방법"으로 찾아야하며 원래의 첫 번째 썽크 배열은 함수 이름의 RVA이 저장된 유일한 장소이기 때문에 사용해야합니다.
가져 오기 바인딩이 사용되지 않으면 원래 첫 번째 썽크 배열은 선택 사항이며 존재하지 않을 수 있습니다.
ASLR은 아마도이 최적화를 무의미하게 만들었습니다.
[Matt Pietrek의 이전 기사] (https://msdn.microsoft.com/en-us/library/ms809762.aspx)에서 잘 설명되어 있습니다. 이 모든 것을 여기서 반복하지는 마십시오, Matt의 기사는 정식입니다. –