Текущий архив: 2005.02.20;
Скачать: CL | DM;
ВнизО профессионализме программиста Найти похожие ветки
← →
Digitman © (2005-01-27 17:14) [80]
> nikkie © (27.01.05 17:03) [75]
тогда выскажи. пож., свое соображение, почему в приведенной цитате IPC-объекты относятся к kernel objects, в то время как некие ф-ции доступа/управления IPC-объектов отнесены к user32, та же PostThreadMessage(), например .. ведь подобного рода очереди и их диспетчеризацию, по идее, должно "вести" именно ЯДРО, а не "нахлобучки" к нему типа USER ?
← →
Игорь Шевченко © (2005-01-27 17:15) [81]default © (27.01.05 17:06) [77]
> нам следовало бы разуметь под объектами ядра то что написано
> в официальной документации(SDK) в разделе kernel objects
Читаем в разделе Handles and Objects:
"An object is a data structure that represents a system resource, such as a file, thread, or graphic image. An application cannot directly access object data or the system resource that an object represents. Instead, an application must obtain an object handle, which it can use to examine or modify the system resource. Each handle has an entry in an internally maintained table"
Про раздел "kernel object", куда относятся DLL и Heaps, а также ресурсы, я уже высказался.
С уважением,
← →
default © (2005-01-27 17:19) [82]Игорь Шевченко © (27.01.05 17:15) [81]
ну счётчик ссылок-то у DLL есть(
Вы дали ссылку на объекты, а не на объекты ядра о чём шла речь
← →
Игорь Шевченко © (2005-01-27 17:20) [83]default © (27.01.05 17:19) [82]
> ну счётчик ссылок-то у DLL есть(
А у окна Handle есть. И что ?
← →
default © (2005-01-27 17:22) [84]Игорь Шевченко © (27.01.05 17:20) [83]
я это на Ваше "Модули и DLL не имеют счетчика ссылок, управляемого ядром и дескрипторов защиты."
← →
Piter © (2005-01-27 17:24) [85]Игорь Шевченко © (27.01.05 15:30) [37]
Какой-какой механизм ?
я его обозвал кешированием. А как это правильно назвать?
Я понимаю, что кеширование это нечто упреждающее и не совсем верно тут говорить о кешировании. Но я просто не знаю правильного названия.
jack128 © (27.01.05 15:41) [39]
Ты просто спутал процедуры и методы
ну тут уже терминология...
Почему вы решили, что процедура описанная в классе уже не является процедурой? Собственно, если объявление начинается с ключевого слова procedure - то это, по моему мнению, процедура и есть. Просто процедуры и функции класса называют методами. Но от этого они не перестают быть процедурами и функциями.
Это я вот так считаю.
Миш - это вовсе не наезд, наёюсь ты понимаешь?
конечно
nikkie © (27.01.05 16:44) [63]
Новичок в программировании для Windows может запутаться, пытаясь отличить объекты User или GDI от объектов ядра.
:))))
← →
Kerk © (2005-01-27 17:26) [86]
> Просто процедуры и функции класса называют методами.
разница не только в этом.
procedure vs procedure of object
← →
Игорь Шевченко © (2005-01-27 17:27) [87]default © (27.01.05 17:22) [84]
Ну так надо читать фразу полностью, а не приводить доводы в защиту ее части :)
С уважением,
← →
default © (2005-01-27 17:30) [88]Игорь Шевченко © (27.01.05 17:27) [87]
выходит я не прав?тогда в чём?счётчик есть я не прав...
← →
Piter © (2005-01-27 17:32) [89]Вот видите какой спор разгорелся. Поэтому я и сказал, что не могу дать определение объектам ядра.
Главное знать для чего они служат и как ими управлять.
← →
nikkie © (2005-01-27 17:33) [90]>[79] esu
>Терминология.
я согласен. просто почему-то Digitman и ИШ настаивают на том, чтобы понимать эту терминологию так, как им хочется, а не так, как принято. мне тоже кажется странным классификация утконоса как млекопитающего, но я терплю... мультик еще такой был - "Кто ж такие птички?"
← →
Игорь Шевченко © (2005-01-27 17:33) [91]default © (27.01.05 17:30) [88]
Счетчик использования DLL действителен только для конкретного процесса и управляется пользовательским режимом. DLL, отображенная (загруженная) в адресное пространство одного процесса недоступна другому процессу.
С уважением,
← →
Piter © (2005-01-27 17:37) [92]Kerk © (27.01.05 17:26) [86]
разница не только в этом.
procedure vs procedure of object
не понял, что ты хотел сказать.
Напомню, что изначально просили сделать перегрузку процедуры. Jack128 говорит, что это можно понимать только как overload.
А я вот считаю, что это еще можно понимать как override, ибо процедуру в классе можно также именовать процедурой.
А можно и методом. Но от этого она процедурой не перестанет быть.
← →
default © (2005-01-27 17:38) [93]Игорь Шевченко © (27.01.05 17:33) [91]
"DLL, отображенная (загруженная) в адресное пространство одного процесса недоступна другому процессу."
это почему?сколько отображений столько и доступов!
"Счетчик использования DLL действителен только для конкретного процесса и управляется пользовательским режимом."
получается если два процесса отобразили на своё пространство адресов одну DLL, потом один процесс её "бросил" то система может свободно выгружать её из памяти наплевав на второй процесс? это же ерунда
← →
default © (2005-01-27 17:41) [94]Игорь Шевченко © (27.01.05 17:33) [91]
Вы вероятно имели ввиду что пока не будет сделано столько же FreeLibrary сколько LoadLibrary отмены отображения не будет
но это-то тут причём, всё равно систма считает сколько процессов "держат" эту DLL
← →
Игорь Шевченко © (2005-01-27 17:44) [95]
> "Счетчик использования DLL действителен только для конкретного
> процесса и управляется пользовательским режимом."
> получается если два процесса отобразили на своё пространство
> адресов одну DLL, потом один процесс её "бросил" то система
> может свободно выгружать её из памяти наплевав на второй
> процесс? это же ерунда
Вдумчиво изучаем, как загружаются DLL.
← →
Игорь Шевченко © (2005-01-27 17:45) [96]nikkie © (27.01.05 17:33) [90]
> просто почему-то Digitman и ИШ настаивают на том, чтобы
> понимать эту терминологию так, как им хочется, а не так,
> как принято
Если не секрет, какое определение является "как принято" ?
С уважением,
← →
default © (2005-01-27 17:47) [97]Игорь Шевченко © (27.01.05 17:44) [95]
ну мы ж цитаты кидали...а тут к литературе...
тогда потом
← →
Sergey_Masloff (2005-01-27 17:47) [98]Вот отошел на 2 часа и что вижу. Нешуточная рубка вокруг объектов ядра - ИМХО полный оффтоп. Давайте назад за жизнь говорить! У меня редкий выходной про объекты ядра не особо хочется.
← →
Игорь Шевченко © (2005-01-27 17:50) [99]default © (27.01.05 17:47) [97]
DLL не грузится в память целиком, а отображается на адресное пространство процесса, поэтому высказываение "система может выгрузить DLL наплевав на ее использование" по меньшей мере свидетельствует о незнании механизма загрузки DLL.
С уважением,
← →
default © (2005-01-27 17:55) [100]Игорь Шевченко © (27.01.05 17:50) [99]
Вы не поняли о чём я, читал я про адресацию на нижнем уровне, про глобальные дескрипторные таблицы и прочую дребедень знаю я как это работает)
я говорил про другое, про то что есть глобальный счётчик пользователей DLL который есть у системы)
← →
kaZaNoVa © (2005-01-27 17:56) [101]Игорь Шевченко © (27.01.05 17:50) [99]
я выгружал используемые длл функциейFreeLibrary
и вполне успешно (!) - правда при попытке системы выполнить код выгруженной длл получалось AV и программа аварийно завершалась ...
← →
Игорь Шевченко © (2005-01-27 17:57) [102]default © (27.01.05 17:55) [100]
> я говорил про другое, про то что есть глобальный счётчик
> пользователей DLL который есть у системы)
И где же он есть ? Точнее, где про этот глобальный счетчик написано ?
← →
Игорь Шевченко © (2005-01-27 17:57) [103]kaZaNoVa © (27.01.05 17:56) [101]
Отдохнул бы ты...
← →
kaZaNoVa © (2005-01-27 17:59) [104]Игорь Шевченко © (27.01.05 17:57) [103]
в чём я не прав? - длл выгружалась, несмотря на то, что в ней выполнялся код ..
← →
default © (2005-01-27 18:04) [105]Игорь Шевченко © (27.01.05 17:57) [102]
допустим DLL лежит на диске
один процесс загружает её вызовом LoadLibrary - естественно происходит её подгрузка в ОП и отображение на пространство адресов первого процесса кода этой DLL
далее второй процесс вызывает LoadLibrary - естественно в память ничего не подгружается выполняется только резервирование и настройка адресов процесса опять же на код этой DLL
у первого процесса счётчик использования этой DLL есть 1
у второго тоже 1
теперь второй вызывает FreeLibrary счётчик обнуляется
будет возможность теперь выгрузить DLL и ОП для ОС?
конечно нет поскольку ещё есть один процесс её использующий
отсюда ясно что система считает число процессов использующих данную DLL
прямо таки лекция...
← →
Игорь Шевченко © (2005-01-27 18:05) [106]kaZaNoVa © (27.01.05 17:59) [104]
Откуда ты выгружал DLL ?
← →
Игорь Шевченко © (2005-01-27 18:06) [107]default © (27.01.05 18:04) [105]
Ты б Рихтера почитал, ей-богу.
← →
kaZaNoVa © (2005-01-27 18:11) [108]Игорь Шевченко © (27.01.05 18:05) [106]
код
дллlibrary Test;
uses
Windows;
{$R *.res}
Procedure F;
Begin
While(true) do sleep(17000);
End;
Var i:cardinal;
begin
CreateThread(nil,0,@f,nil,0,i);
end.
форма
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
tag:=LoadLibrary("test.dll");
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
FreeLibrary(Tag);
end;
end.
загружаем/выгружаем (!) всё ок, длл можно даже удалить, (выгрузилась) а через несколько секунд получаем AV, проверил несколько раз ..
← →
Игорь Шевченко © (2005-01-27 18:14) [109]
> загружаем/выгружаем (!) всё ок, длл можно даже удалить,
> (выгрузилась) а через несколько секунд получаем AV, проверил
> несколько раз ..
Это несколько не в тему. Потому и мой совет в [103]
← →
default © (2005-01-27 18:16) [110]Игорь Шевченко © (27.01.05 18:06) [107]
не вижу ошибки чтобы читать
ясно что явно мы знаем лишь о внутрипроцессном счётчике, но очевидно есть и глобальный отсюда уже одно свойство в пользу причисления DLL к объекту ядра
kaZaNoVa © (27.01.05 18:11) [108]
сдесь просто пытается выполнить код DLL, а он уже ототображён от ВАП процесса
физически же DLL может находиться в ОП
← →
kaZaNoVa © (2005-01-27 18:17) [111]Игорь Шевченко © (27.01.05 18:14) [109]
понятно .. но мой пример доказывает, что всё-же можно выгружать используемые длл, несмотря не на что ..
← →
default © (2005-01-27 18:17) [112]kaZaNoVa © (27.01.05 18:11) [108]
здесь просто поток пытается выполнить код DLL, а он уже ототображён от ВАП процесса
физически же DLL может находиться в ОП
← →
Sergey_Masloff (2005-01-27 18:18) [113]default © (27.01.05 18:04) [105]
>допустим DLL лежит на диске
>один процесс загружает её вызовом LoadLibrary - естественно >происходит её подгрузка в ОП и отображение на пространство >адресов первого процесса кода этой DLL
>далее второй процесс вызывает LoadLibrary - естественно в >память ничего не подгружается выполняется только резервирование >и настройка адресов процесса опять же на код этой DLL
Кстати как насчет не может второй процесс по базовому адресу ее загрузить не может. То тогда вообще все по-другому же ж ;-)
← →
Игорь Шевченко © (2005-01-27 18:20) [114]default © (27.01.05 18:16) [110]
> но очевидно есть и глобальный отсюда уже одно свойство
> в пользу причисления DLL к объекту ядра
И откуда это очевидно ?
ЗЫ: Рихтера почитай.
kaZaNoVa © (27.01.05 18:17) [111]
Так ты же все делаешь в своем процессе - там ты хозяин выбивать из-под себя табуретку. Дурное дело нехитрое.
← →
esu © (2005-01-27 18:45) [115]
> ЗЫ: Рихтера почитай.
BTW Эта книжка существует в электронном виде ? А то прям как библия как я посмотрю :)
← →
Rule © (2005-01-27 18:51) [116]esu © (27.01.05 18:45) [115]
все библии должны дома стоять на полочке, а не в электронном виде :)
← →
Kerk © (2005-01-27 18:55) [117]чуть-чуть в тему:
http://wasm.ru/baixado.php?mode=tool&id=289This creates a remote thread in a target
process and attempts to call FreeLibrary()
in order to unload the target dll.
← →
Kerk © (2005-01-27 18:56) [118]esu © (27.01.05 18:45) [115]
у меня есть.. а еще у Подгорецкого посмотри
← →
esu © (2005-01-27 18:57) [119]
> Rule © (27.01.05 18:51) [116]
Ну у меня один фолдер так дома и называется "полка" ;)
← →
Rule © (2005-01-27 19:00) [120]esu © (27.01.05 18:57) [119]
теперь осталось сделать так, чтобы все файлы там стояли а не лежали :)
Страницы: 1 2 3 4 вся ветка
Текущий архив: 2005.02.20;
Скачать: CL | DM;
Память: 0.69 MB
Время: 0.071 c