[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Вопросы по созданию пакета.



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 используется везде (в нормально собранных приложениях).

>> Вопрос был в том висят ли линуксовые библиотеки в памяти и разделяются между
>> всеми процессами или нет?
> Висят, разделяются.
Понял.


Reply to: