2017-12-15 21 views
1

Windows Server 2012 R2 Standard를 실행하는 특정 컴퓨터에서 32 비트 Win32 콘솔 응용 프로그램이 64 비트 버전의 kernel32.dll을로드하는 중입니다. 그것은 다음과 같습니다 간단한 하여 HelloWorld 응용 프로그램과 함께 Dependency Walker를 사용Win32 32 비트 프로세스가 64 비트 kernel32.dll을로드합니다.

:

Loading the 64-bit version of kernel32.dll

이 제대로 다른 컴퓨터에서 32 비트 KERNEL32를로드합니다.

Loading the 32-bit version of kernel32.dll

PATH의 값은 동일하지 그래서 적어도 다른 컴퓨터에 정확히 동일한 순서로 관련 경로를 포함하는 경우 것 같다.

Microsoft에서 this page에 따르면, DLL에 대한 검색 순서는 다음과 같습니다

  1. 현재 프로세스의 실행 모듈이있는 디렉토리.
  2. 현재 디렉토리.
  3. Windows 시스템 디렉토리. GetSystemDirectory 함수는이 디렉토리의 경로를 검색합니다.
  4. Windows 디렉터리입니다. GetWindowsDirectory 함수는이 디렉터리의 경로를 검색합니다.
  5. PATH 환경 변수에 나열된 디렉토리.

나는 Windows/system32 대신 Windows/SysWOW64 또는 32 비트 프로세스에 대한 SysWOW64system32에서 매핑이 제대로 작동하지 않지만 이러한 자격을 갖춘 추측이라는 경로를 반환 GetSystemDirectory이 특정 컴퓨터에 그 추측하고있다.

이 문제의 원인은 무엇입니까?

+1

이것은 종속성 워커의 실수 일뿐입니다. 32 비트 앱은 정적 가져 오기로 kernel32.dll의 64 비트 버전을로드하지 않습니다. 및 경로/GetSystemDirectory - 항상 여기에 관련이 없으므로 항상 \ KnownDlls32 \ kernel32.dll 섹션에 있습니다. 그것은 사용될 것입니다 – RbMm

+2

Dependency Walker가 다소 안정적으로 작업 한 마지막 시간은 Windows Vista에있었습니다. Dependency Walker에서 Windows 7을 시작하는 모든 OS에서 혼란 스럽거나 오도 된 정보를 볼 수 있도록 준비하십시오. DLL 문제를 진단하는 더 좋은 방법은 [loader snaps 사용] (https://docs.microsoft.com/en-us/windows)입니다. -hardware/drivers/debugger/show-loader-snaps)를 사용합니다. – IInspectable

답변

3

종속성 워커가 종속성을 잘못보고하고 있습니다. 정적 분석은 때로는 32 비트와 64 비트 모듈 사이에서 혼란스러워집니다. 일반적으로 이것은 32 비트 대상 실행 파일에 대해 64 비트 버전의 종속성 워커를 실행하거나 그 반대의 경우입니다.

32 비트 프로그램이 32 비트 버전의 kernel32를로드하고 있으므로 안심하십시오.

+0

당혹 스럽네요. 당신 말이 맞아요. :-) 최대한 빨리 답변을 수락합니다. – mgd