Linux是否有一个可以导出操作系统功能的共享库?
msvcrt.dll - > libc.so.6的
kernel32.dll - > ?
答案 0 :(得分:7)
'kernel32.dll'也会转换为libc.so.6。由于Windows不是最低级别的POSIX,因此需要一个额外的层来将POSIX libc调用转换为本机Win32调用。这就是msvcrt.dll的用途。 Kernel32.dll包含最低级别的调用。在Linux上,那些系统调用已经是POSIX,因此不需要额外的库。
答案 1 :(得分:4)
msvcrt.dll与libc.so.6无法真正比较,因为第一个是VC ++的特定DLL(msvcrt - > MicroSoft Visual C ++ RunTime)。
系统调用(打开,关闭,读取,写入等)也在libc中。它们只是用汇编语言编写的软件中断的简单包装。
答案 2 :(得分:2)
libc相当于Linux中的kernel32,标准库的GNU扩展处理了你可以调用内核的所有方法。 (从技术上讲,libc相当于ntdll,但无论是在这里还是在那里)
编辑:只是为了澄清 - 内核本身导出了一些名为syscalls的特殊方式调用的函数;这些系统调用由实际函数包装;在Linux上,这是在libc中完成的,在Windows上完成两次,一次是ntdll(即NtCreateFile),然后是Kernel32(CreateFileW / A)。
Kernel32提供了许多其他功能,这些功能不是系统调用(即在用户模式下保持100%),就像libc一样。
答案 3 :(得分:1)
我想你可能在寻找:
linux-vdso.so.1 => (0x00000...)
Linux内核的“虚拟库”链接。
您的内核标题将为您提供API详细信息。
通过快速谷歌找到了这个。
答案 4 :(得分:0)
您将手动查找要使用的kernel32.dll中win32的哪些功能,并在linux / gnu中查找替换内容。 linux使用了大量的共享库。并非所有操作系统都在同一位置直接替换。有些图书馆可以处理跨平台的事情。