2015-01-08 3 views
1

최근 MoleBox에서 실행 파일로 포장 된 일부 IAT를 수정했으며 '_lopen', '_lwrite'및 '_lread'와 같이 kernel32 함수와 링크되어 있음을 확인했습니다. 이 site은 해당 API가 16 비트 버전의 Windows와의 호환성을 위해 제공된다고 명시합니다. 나는 'Win16'응용 프로그램을 긴 모드 (예 - Win8.1 x64를 실행 중입니다.)에서 실행할 수 없다는 것을 안다. 그래서 'kernel32.dll'에 여전히 포함될 목적은 무엇입니까?최신 Win16 API 중 일부가 최신 Windows 버전에서 계속 지원되는 이유는 무엇입니까?

그런데이 기능은 'msdn'라이브러리에도 포함되어 있지 않습니다.

편집 : 또한 이러한 기능이 실제로 16 비트가 아닌 것으로 보입니다! 스택에 32 비트 매개 변수를 사용하고 있습니다.

+0

물론 그들은 16 비트가 아닙니다. 'kernel32.dll'은 32 또는 64 비트 모듈입니다. 또한 함수가 32 비트 매개 변수를 사용한다고해서 32 비트가되지는 않습니다. –

+1

[Raymond Chen의 블로그] (http://blogs.msdn.com//b/oldnewthing)에서 아카이브를 읽는 데 시간을 할애합니다. 여기서 그는 오래 유지되는 호환성 코드에 대해 자주 논의합니다. –

+0

주된 이유는 분명히 그들을 포함하지 않고 프로그래머가 기존의 프로그램을 다시 작성하도록 강요하지 않았기 때문입니다. 32 비트로 구현하는 것은 쉽지 않았습니다. –

답변

6

16 비트 응용 프로그램에서 함수를 호출 할 수있는 것은 아닙니다. 분명히 그들은 32 비트 및 64 비트 모듈에 있기 때문에 그렇게 할 수 없습니다. 요점은 개발자가 오래된 프로그램을 다시 작성하지 않고 컴파일하는 것이 더 쉬워 졌기 때문입니다.

이제 2015 년에 다시 컴파일하려는 16 비트 프로그램이있는 개발자를 수용 할 필요가 없습니다. 그것은 아마도 더 이상 중요한 수준으로는 일어나지 않을 것입니다. 하지만 시계를 20 년 동안 롤백하면 이것이 정말 염려됩니다. 그리고 따라서 MS는 이러한 compat 목발을 포함 시켰습니다. 그리고 일단 그들이 포함되면 MS는 바이너리 호환성을 손상시키지 않기 위해 아마 거기에두기로 결정했을 것입니다. MS는 오래된 프로그램을 파괴하지 않기 위해 많은 노력을 기울이고 있습니다. 이러한 기능을 제거 했더라도이 기능을 사용하는 프로그램은 중단됩니다.

0

Microsoft는 함수가 "오래된 것"이므로 제거하지 않습니다. 다시 구현해야하는 즉시 이러한 함수를 제거하지만, 현재는 함수를 유지하는 데 필요한 작업이 적습니다.