Сейчас на форуме: tyns777 (+4 невидимых)

 eXeL@B —› Программирование —› Размер стёка и кучи в DLL
Посл.ответ Сообщение

Ранг: 40.9 (посетитель), 8thx
Активность: 0.040.01
Статус: Участник

Создано: 21 октября 2010 16:51
· Личное сообщение · #1

Я вот чё-то никак не пойму, зачем в PE-заголовке DLL указываются размеры кучи и стёка, ведь по здравому размышлению библа использует хип и стёк процесса, в чьё адресное пространство она проецируется. Или я не прав и есть какая-то страшная тайна




Ранг: 533.6 (!), 232thx
Активность: 0.450
Статус: Uploader
retired

Создано: 21 октября 2010 16:57
· Личное сообщение · #2

FalseMaster пишет:
Или я не прав и есть какая-то страшная тайна

Есть.

FalseMaster пишет:
Я вот чё-то никак не пойму, зачем в PE-заголовке DLL указываются размеры кучи и стёка, ведь по здравому размышлению библа использует хип и стёк процесса, в чьё адресное пространство она проецируется.

Это просто интерес, или у тя какие-то проблемы?

-----
Лучше быть одиноким, но свободным © $me





Ранг: 355.4 (мудрец), 55thx
Активность: 0.320
Статус: Uploader
5KRT

Создано: 21 октября 2010 17:05
· Личное сообщение · #3

ИМХО, что за 'стёк', что за 'пёрл' - ужасные названия там 'э' вставляется

-----
Gutta cavat lapidem. Feci, quod potui. Faciant meliora potentes




Ранг: 162.4 (ветеран), 11thx
Активность: 0.060
Статус: Участник

Создано: 21 октября 2010 17:33 · Поправил: SWR
· Личное сообщение · #4

PE это формат файла. и exe и dll имеют PE формат (ну еще sys и тд).
следовательно имеют некотырые одинаковые поля


PS DllMain зовется после загрузки и хз скока её стека надо



Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 21 октября 2010 17:42
· Личное сообщение · #5

Там есчо директория конфигурации есть к примеру. Это никак не значит что она глобальна.



Ранг: 40.9 (посетитель), 8thx
Активность: 0.040.01
Статус: Участник

Создано: 21 октября 2010 18:46
· Личное сообщение · #6

Это просто интерес, или у тя какие-то проблемы?

Нет, это не праздный интерес. Я пишу прогу (не вирь), которая проделывает некоторые манипуляции с PE'шкой и просто хочу понимать, что делаю.

PS DllMain зовется после загрузки и хз скока её стека надо

А что, разве DllMain чем-то отличается от других функций?

P.S. Просьба ко всем: давайте поконкретнее.



Ранг: 162.4 (ветеран), 11thx
Активность: 0.060
Статус: Участник

Создано: 21 октября 2010 19:09
· Личное сообщение · #7

FalseMaster пишет:
А что, разве DllMain чем-то отличается от других функций?

Ну это точка входа в dll (может и не быть = NULL)/
И её дергает загрузчик со своим стеком.
И хрен его знает скока в этой длл выделится памяти для своих нужд (может аллокатор памяти у неё свой).
Вот и надо знать скока она хипа требует для полного счастья (заодно проверить есть ли стока линейной виртуальной памяти).



Ранг: 40.9 (посетитель), 8thx
Активность: 0.040.01
Статус: Участник

Создано: 21 октября 2010 19:54
· Личное сообщение · #8

SWR, правильно ли я понял, что если, допустим, значение(я) heap/stack указанные в заголовке DLL'ки больше, чем были у нити при её создании, то они (те, которые у нити) увеличиваются.



Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 21 октября 2010 20:56 · Поправил: Clerk
· Личное сообщение · #9

FalseMaster
Эти поля хидера используются только при создании процесса в RtlpCreateStack/BaseCreateStack и не используются в длл, а тока в экзешниках (и тока при создании процесса).

| Сообщение посчитали полезным: FalseMaster

Ранг: 40.9 (посетитель), 8thx
Активность: 0.040.01
Статус: Участник

Создано: 21 октября 2010 21:36
· Личное сообщение · #10

Эти поля хидера используются только при создании процесса в RtlpCreateStack/BaseCreateStack и не используются в длл

И я так считаю (см. первый пост) ... Юрий Харон, кстати, тоже - вот выдержка из справки по UniLink:
Размер выделяемого на старте хипа должен быть меньше или равен зарезервированному. Линкер округляет указанное значение до кратности 4 байтам.
Осмысленно только для .EXE-файлов.

Дла стёка тоже самое. Но вот смущает тот факт, что во всех виденных мною DLL'ках значения обсуждаемых полей мало того, что не в нулях, так ещё и варьируются. Выходит, что программисты из мелкософта не знают как функционирует их собственная ось. Подозрительно это как-то.



Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 21 октября 2010 21:44
· Личное сообщение · #11

FalseMaster
Не должно вызывать подозрение установка полей в валидные значения, хоть они и не используются в дальнейшем. Да и вобще юзермодные потоки стек не переопределяют, хотя такая возможность существует.



Ранг: 40.9 (посетитель), 8thx
Активность: 0.040.01
Статус: Участник

Создано: 21 октября 2010 22:43
· Личное сообщение · #12

Не должно вызывать подозрение установка полей в валидные значения, хоть они и не используются в дальнейшем.

Ладно, буду работать над собой


 eXeL@B —› Программирование —› Размер стёка и кучи в DLL
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати