Есть ли в Linux разделяемая библиотека, которая экспортирует функции ОС?

Msvcrt.dll -> libc.so.6

Kernel32.dll ->?

4
Unknown 12 Июн 2009 в 23:10

5 ответов

Лучший ответ

"kernel32.dll" также будет преобразован в libc.so.6. Поскольку Windows не является POSIX на самом низком уровне, ей нужен дополнительный уровень для преобразования вызовов POSIX libc в собственные вызовы Win32. Для этого и нужен msvcrt.dll. Kernel32.dll содержит вызовы самого низкого уровня. В Linux эти системные вызовы уже являются POSIX, поэтому дополнительных библиотек не требуется.

9
Rutger Nijlunsing 12 Июн 2009 в 19:17

Msvcrt.dll на самом деле не сопоставим с libc.so.6, поскольку первая - это конкретная DLL для VC ++ (msvcrt -> MicroSoft Visual C ++ RunTime).

Системные вызовы (открытие, закрытие, чтение, запись и т. Д.) Также находятся в libc. Это всего лишь простые оболочки для программных прерываний, написанные на языке ассемблера.

4
Juliano 12 Июн 2009 в 19:17

Libc является эквивалентом kernel32 в Linux, расширения GNU для стандартной библиотеки обрабатывают все способы, которыми вы можете вызывать ядро. (Технически libc - это эквивалент ntdll, но ни здесь, ни там)

Изменить: Чтобы уточнить - само ядро ​​экспортирует ряд функций, вызываемых особым образом, называемых системными вызовами; эти системные вызовы заключаются в оболочку фактических функций; в Linux это делается в libc, в Windows это делается дважды, один раз с помощью ntdll (т.е. NtCreateFile), а затем снова с помощью Kernel32 (CreateFileW / A).

Kernel32 предлагает ряд других функций, которые не являются системными вызовами (т.е. остаются на 100% в пользовательском режиме), как и libc.

2
Ana Betts 12 Июн 2009 в 19:27

Я думаю, вы можете искать:

linux-vdso.so.1 =>  (0x00000...)

Это ссылка на «виртуальную библиотеку» для ядра Linux.

Заголовки ядра предоставят вам подробную информацию об API.

Нашел это с помощью быстрого гугла.

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

1
Aiden Bell 12 Июн 2009 в 19:18

Вам нужно будет вручную найти, какие функции win32 в kernel32.dll вы хотите использовать, и найти замену в linux / gnu. Linux использует множество разделяемых библиотек. Не у всех есть прямая замена в одном и том же месте в разных операционных системах. Есть библиотеки, которые заботятся о кроссплатформенности.

0
Daniel A. White 12 Июн 2009 в 19:13