01.10.2012 22:56, Andrey Rahmatullin пишет: > On Mon, Oct 01, 2012 at 10:48:40PM +0400, "Артём Н." wrote: >>>>>> Или в Linux нет чего-то подобного kernel32.dll (т.е. всё только через >>>>>> libc >>>>>> обёртки над системными вызовами, через прерывания, например)? >>>>> Уточните вопрос. >>>> Т.е., libc не "висит" в памяти, а загружается каждый раз заново для каждого >>>> процесса (ну или загружается только часть libc, поскольку библиотека - >>>> архив, а >>>> как оно работает дальше, я не знаю)? >>>> >>>> Т.е., допустим, kernel32.dll всегда был доступен по определённому адресу у >>>> разных винд. Но по фиксированному. Загрузчик знал адрес и при разрешении >>>> импорта >>>> просто подставлял адреса из таблицы экспорта kernel32 + её адрес загрузки >>>> (грубо), насколько я понимаю. >>> Вообще вы тут смешиваете разделение ядро-юзерспейс (иначе к чему про >>> системные вызовы и прерывания) и системные-левые библиотеки. Да, системные >>> библиотеки в Win32 имеют базовые адреса, позволяющие не переписывать >>> ссылки на них, но kernel32.dll тут не отличается ничем от других >>> стандартных библиотек, к тому же это можно делать и со своими >>> библиотеками. >> За исключением того, что оно является переходником между ядром и приложением. > И что? > >> это единственная библиотека, которую импортирует любое приложение. > Нет. Посмотрел импорт. Действительно, импортирует из ntdll.dll, kernelbase и, в w7, ещё из кучи каких-то библиотек, у которых импорта нет. Ntdll, видимо, использует прерывания или ещё что-то для вызова функций ядра. Т.е., kernel32 не обязательна. Но всегда включается любым вменяемым компилятором. Хотя бы потому, что функция ExitProcess используется везде (в нормально собранных приложениях).
>> Вопрос был в том висят ли линуксовые библиотеки в памяти и разделяются между >> всеми процессами или нет? > Висят, разделяются. Понял. -- To UNSUBSCRIBE, email to [email protected] with a subject of "unsubscribe". Trouble? Contact [email protected] Archive: http://lists.debian.org/[email protected]

