정적으로 연결된 CRT가 너무 많은 FLS 제한 사항을 중심으로 작업합니까?

StackOverflow https://stackoverflow.com/questions/1437422

  •  08-07-2019
  •  | 
  •  

문제

LoadLibrary를 통해 외부 DLL (제어하지 않음)을로드 할 때, 우리는 해당 DLL의 정적으로 연결된 CRT가 섬유-로컬 저장소를 할당하지 못하는 문제를 겪고 있습니다. 이것은 비슷합니다 MSKB 193462, 이것은 FLS이고 그중 128 개만 있다는 점을 제외하고.

문제를 해결하는 유용한 방법이 있습니까? CRT는 getProcaddress를 사용하여 어쨌든 flsalloc을 찾습니다 (XP에는 존재하지 않았기 때문에).

(이것은 Flsalloc이 실제로 존재하는 Vista에 있습니다. DLL은 MSVC8을 사용하는 것으로 보입니다)

도움이 되었습니까?

해결책

여기에는 솔직히 해결책이 없으며 DLL을 적게로드하지 않습니다.

DLL의 가져 오기 주소 테이블을 연결할 수 있지만 LoadLibrary가 반환 될 때만 IAT 후크 만 설치할 수 있기 때문에 너무 늦게 발생하며 CRT 초기화 코드는 이미 처리 될 DLLProcessAttach에 대한 응답으로 실행될 수 있습니다.

Kernel32.dll 모듈을 메모리에서 찾아 GetProcaddress 또는 FlsAlloc의 내보내기 주소를 패치하여 구현을 가리킬 수 있습니다. 그러나 그 접근법은 심각하게 해킹되고 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top