Сейчас на форуме: zds, kris_sexy, ==DJ==[ZLO] (+7 невидимых)

 eXeL@B —› Крэки, обсуждения —› Разыскивается информация о флагах в PE-файлах
Посл.ответ Сообщение

Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 18 июня 2006 19:10
· Личное сообщение · #1

Наткнулся на такую интересную штуку.
После распаковки одной dll прога работал только при первой загрузке за сеанс.
В следующий раз эта dll попадала не в ImageBase и почему-то вызывала глюки (хотя релоки вроде бы правильные).
Так вот, стоило убрать два флага:
===
Line numbers stripped :No
Local symbols stripped :No
===
как всё сразу заработало.
Флаг Relocations stripped не трогал (он снят).
Вопросы такие:
1. Почему теперь эта dll грузится всегда по ImageBase?
2. Почему с этими флагами dll грузится по ImageBase только первый раз?
3. Где можно почитать об этих флагах более-менее подробно?

ЗЫ Пишу редактор PE-релоков, для самообразования, хотелось бы разобраться как следует.

-----
Всем привет, я вернулся




Ранг: 163.7 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 19 июня 2006 07:34
· Личное сообщение · #2

Загрузчик всегда пытается замапить имидж по базовому адресу, и только если он занят, будет релоцировать.

Почему влияют те 2 других флага - хз, имхо с релоками не совсем все в порядке, поэтому ты столкнулся с фичей загрузчика Это вроде как дебажная инфа старого образца, непонятно, что её делать в релизной версии, собранной современным транслятором. Хотя в официальной документации http://www.microsoft.com/whdc/system/platform/firmware/PECOFF.mspx и не сказано напрямую, что это инфа может быть в "object only".



Ранг: 15.6 (новичок)
Активность: 0.030
Статус: Участник

Создано: 19 июня 2006 13:58
· Личное сообщение · #3

Скачивай описалово к PE-формату, там про всё и узнаешь. Если надо, то могу дать (англ. версия). Поискал в книжном варианте, ничего такого, что тебе поможет не нашёл?



Ранг: 495.3 (мудрец)
Активность: 0.30
Статус: Участник

Создано: 19 июня 2006 15:17
· Личное сообщение · #4

S_T_A_S_ пишет:
Загрузчик всегда пытается замапить имидж по базовому адресу, и только если он занят, будет релоцировать.

Я так и думал, пока не наткнулся на этот глюк.
Получается такая штука. При первой загрузке, образ действительно размещается исходя из значения поля ImageBase, если нет конфликта адресов. А вот в следующий раз, dll'ка уже сидит в свопе (или чёрти знает где) и загрузчик почему-то упрямо мапит её на другой VA. Всегда младший свободный для dll.
Возможно, это связано с "дефрагментацией" памяти (это только догадка).

S_T_A_S_ пишет:
имхо с релоками не совсем все в порядке, поэтому ты столкнулся с фичей загрузчика

Да, исправил (удалил левые указатели на релоки секций). Теперь эти флаги не влияют =/.

-----
Всем привет, я вернулся



 eXeL@B —› Крэки, обсуждения —› Разыскивается информация о флагах в PE-файлах
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати