2009-06-12 1 views

답변

7

'kernel32.dll'도 libc.so.6으로 변환됩니다. Windows는 가장 낮은 수준의 POSIX가 아니므로 POSIX libc 호출을 기본 Win32 호출로 변환하는 데 추가 계층이 필요합니다. 이것이 msvcrt.dll의 용도입니다. Kernel32.dll에는 가장 낮은 수준의 호출이 포함되어 있습니다. 리눅스에서는 이러한 시스템 호출이 이미 POSIX이므로 추가 라이브러리가 필요하지 않습니다.

+0

이것은 완전히 정확하지 않습니다 - 대부분의 msvcrt 함수는 * msvcrt에서 처리됩니다. strtok과 같은 것은 확실히 커널에 가지 않습니다! –

+0

OS 지원이 필요하지 않은 경우 라이브러리가 단독으로 처리 할 수있는 것보다 사실입니다. –

+0

은 OS 기능 (Linux VDSO + 헤더)을 내 보냅니다. –

0

kernel32.dll에있는 win32의 어떤 기능을 수동으로 찾아보고 linux/gnu에서 대체물을 찾아야합니다. 리눅스가 사용하는 많은 공유 라이브러리가 있습니다. 모든 운영 체제에서 같은 위치에서 직접 교체 할 수있는 것은 아닙니다. 크로스 플랫폼 관련 작업을 처리하는 라이브러리가 있습니다.

+0

그럼 일반 목록을보고 싶습니다. 예를 들어, 어디에서 brk와 sbrk를 찾을 수 있을까요 ?? http://linux.die.net/man/2/sbrk – Unknown

+0

@Unknown : libc. – Juliano

2

libc는 Linux의 kernel32와 동일합니다. 표준 라이브러리의 GNU 확장은 커널에 호출 할 수있는 모든 방법을 처리합니다. 그냥 명확하게 - 커널 자체가 특별한 방식이라는 시스템 콜 호출 함수를 수출;

편집 (기술적으로는 libc의이 방법 ntdll의 상당하지만,도 여기에도) 이 syscall은 실제 함수로 싸여 있습니다. 리눅스에서는 libc에서, Windows에서는 ntdll (NtCreateFile), Kernel32 (CreateFileW/A)를 차례로 두 번 실행합니다.

Kernel32는 libc와 마찬가지로 syscall이 아닌 다른 기능도 제공합니다 (즉, 사용자 모드에서 100 % 유지).

4

msvcrt.dll은 VC++ (msvcrt -> MicroSoft Visual C++ RunTime)의 특정 DLL이기 때문에 libc.so.6과 비교할 수 없습니다.

시스템 호출 (열기, 닫기, 읽기, 쓰기 등)은 libc에도 있습니다. 그것들은 어셈블리 언어로 작성된 소프트웨어 중단에 대한 단순한 래퍼 일뿐입니다.

1

난 당신이 찾고있는 것 같아요 :

리눅스 커널에 대한 '가상 라이브러리'링크입니다
linux-vdso.so.1 => (0x00000...) 

.

커널 헤더가 API 세부 정보를 제공합니다.

빠른 Google로 이걸 발견했습니다.

http://www.trilithium.com/johan/2005/08/linux-gate/

+0

VDSO는 kernel32.dll보다 ntdll.dll에 가깝습니다. – CesarB

+0

Windows를 사용하지 않습니다 ... 어둠 속에서 찌르다 : P –