Сейчас на форуме: zds, kris_sexy, ==DJ==[ZLO] (+7 невидимых) |
eXeL@B —› Крэки, обсуждения —› Разыскивается информация о флагах в PE-файлах |
Посл.ответ | Сообщение |
|
Создано: 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-релоков, для самообразования, хотелось бы разобраться как следует. ----- Всем привет, я вернулся |
|
Создано: 19 июня 2006 07:34 · Личное сообщение · #2 Загрузчик всегда пытается замапить имидж по базовому адресу, и только если он занят, будет релоцировать. Почему влияют те 2 других флага - хз, имхо с релоками не совсем все в порядке, поэтому ты столкнулся с фичей загрузчика Это вроде как дебажная инфа старого образца, непонятно, что её делать в релизной версии, собранной современным транслятором. Хотя в официальной документации http://www.microsoft.com/whdc/system/platform/firmware/PECOFF.mspx и не сказано напрямую, что это инфа может быть в "object only". |
|
Создано: 19 июня 2006 13:58 · Личное сообщение · #3 |
|
Создано: 19 июня 2006 15:17 · Личное сообщение · #4 S_T_A_S_ пишет: Загрузчик всегда пытается замапить имидж по базовому адресу, и только если он занят, будет релоцировать. Я так и думал, пока не наткнулся на этот глюк. Получается такая штука. При первой загрузке, образ действительно размещается исходя из значения поля ImageBase, если нет конфликта адресов. А вот в следующий раз, dll'ка уже сидит в свопе (или чёрти знает где) и загрузчик почему-то упрямо мапит её на другой VA. Всегда младший свободный для dll. Возможно, это связано с "дефрагментацией" памяти (это только догадка). S_T_A_S_ пишет: имхо с релоками не совсем все в порядке, поэтому ты столкнулся с фичей загрузчика Да, исправил (удалил левые указатели на релоки секций). Теперь эти флаги не влияют =/. ----- Всем привет, я вернулся |
eXeL@B —› Крэки, обсуждения —› Разыскивается информация о флагах в PE-файлах |