Есть ли в Linux разделяемая библиотека, которая экспортирует функции ОС?
Msvcrt.dll -> libc.so.6
Kernel32.dll ->?
5 ответов
"kernel32.dll" также будет преобразован в libc.so.6. Поскольку Windows не является POSIX на самом низком уровне, ей нужен дополнительный уровень для преобразования вызовов POSIX libc в собственные вызовы Win32. Для этого и нужен msvcrt.dll. Kernel32.dll содержит вызовы самого низкого уровня. В Linux эти системные вызовы уже являются POSIX, поэтому дополнительных библиотек не требуется.
Msvcrt.dll на самом деле не сопоставим с libc.so.6, поскольку первая - это конкретная DLL для VC ++ (msvcrt -> MicroSoft Visual C ++ RunTime).
Системные вызовы (открытие, закрытие, чтение, запись и т. Д.) Также находятся в libc. Это всего лишь простые оболочки для программных прерываний, написанные на языке ассемблера.
Libc является эквивалентом kernel32 в Linux, расширения GNU для стандартной библиотеки обрабатывают все способы, которыми вы можете вызывать ядро. (Технически libc - это эквивалент ntdll, но ни здесь, ни там)
Изменить: Чтобы уточнить - само ядро экспортирует ряд функций, вызываемых особым образом, называемых системными вызовами; эти системные вызовы заключаются в оболочку фактических функций; в Linux это делается в libc, в Windows это делается дважды, один раз с помощью ntdll (т.е. NtCreateFile), а затем снова с помощью Kernel32 (CreateFileW / A).
Kernel32 предлагает ряд других функций, которые не являются системными вызовами (т.е. остаются на 100% в пользовательском режиме), как и libc.
Я думаю, вы можете искать:
linux-vdso.so.1 => (0x00000...)
Это ссылка на «виртуальную библиотеку» для ядра Linux.
Заголовки ядра предоставят вам подробную информацию об API.
Нашел это с помощью быстрого гугла.
http://www.trilithium.com/johan/2005/08/linux-gate/
Вам нужно будет вручную найти, какие функции win32 в kernel32.dll вы хотите использовать, и найти замену в linux / gnu. Linux использует множество разделяемых библиотек. Не у всех есть прямая замена в одном и том же месте в разных операционных системах. Есть библиотеки, которые заботятся о кроссплатформенности.
Похожие вопросы
Связанные вопросы
Новые вопросы
linux
ВОПРОСЫ LINUX ДОЛЖНЫ БЫТЬ ПРОГРАММИРОВАНЫ. Используйте этот тег только в том случае, если ваш вопрос касается программирования с использованием API-интерфейсов Linux или специфичного для Linux поведения, а не только потому, что вы случайно запускаете свой код в Linux. Если вам нужна поддержка Linux, вы можете попробовать https://unix.stackexchange.com или сайт Stack Exchange конкретного дистрибутива Linux, например https://askubuntu.com или https://elementaryos.stackexchange.com/.