· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Код и данные в одной секции

<< . 1 . 2 .

Посл.отвђт Сообщенiе


Дата: Авг 26, 2004 00:04:23

bogrus
> KAV не ругаитца :) , об других антивирях интересно услышать.

Каспер ругаитца и ещё как, ибо других антивирей не держим.
Хошь выложу calc.exe от XP, в котором я в секцию ресурсов добавил немножко кода, Каспер сказал что файл подозрительно похож на вирус :-) хотя возможно твой файл у него и не вызывает подозрений ;-)


Дата: Авг 26, 2004 03:43:39

Asterix > „ведь никто не мешает сделать в файле всего одну секцию, обозвать ее .rsrc“

Дык с этим никто не спорит. Проблема в том, что если делать по другому, то работает не всегда. :-)



bogrus > „Тогда мне не понятно , почему PE Explorer на них злиться“

IMHO глючный он!
Потому что не вычисляет адрес для каждого ресурса в отдельности через их каталог, а полагается на их определённый порядок в файле.
Если используется кампиляторы ресурсов, то этот порядок строго определён.
Я же писАл про PEview - он тоже не всё корректно обрабатывает.
Автор так и ответил - никогда просто не видел подобного строения директории, хотя с точки зрения формата, она правильна.


> „Я не могу найти такого упоминания “

Я немного не так выразился.
Стр. 60, 6.8. The .rsrc Section:
The general structure of the .rsrc section is:
---------------------------------------------------------------------- --------------------
Data                            | Description
---------------------------------------------------------------------- --------------------
Resource Directory Tables (and  | A series of tables, one for each group of nodes in the
Resource Directory Entries)     | tree. All top-level (Type) nodes are listed in the first table.
Нигде не сказано, что ресурсы могут находиться где-то ещё кроме указанной секции.


> „Пропадает отображение Version_Info по правому клику , если ресурсы находяться не в начале секции .“

Я слегка подправил аттач, теперь version info видно.
Таблицы IMAGE_RESOURCE_DIRECTORY Language с LANG_NEUTRAL для иконки можно бы и убрать совсем, но стандартные макросы FASM это не позволяют вроде бы.
Для Version Info и других строковых - наличае бязательно. Это в общем-то логично, хотя судя по спецификации директории ресурсов - не обязательно.


> „И побочная проблема , а может и нет..“

Я бы сказал, это проблема не наща :-)
It's not a bug, it's a feature!


722204859__project.asm


Дата: Авг 27, 2004 00:22:49

Вся проблема в LOAD_LIBRARY_AS_DATAFILE и в RVA Offset to Data из IMAGE_RESOURCE_DATA_ENTRY .

Если модуль с ресурсами был загружен как DATAFILE , то эти RVA можно было бы увеличить на размер того , что мы напихали перед ресурсами в этой одной секции , тогда работает . Может будет понятней на макросе Resource.inc :
macro version label,fileos,filetype,filesubtype,lang,cp,[name,value]
 { common
    local data,size,vivalue,visize
    label dd RVA data,size,0,0
Т.е. сделать RVA data+sizeof.напиханое или , что ещё хуже , уменьшить RVA таблицы ресурсов в PE хидере (например было 0040105Bh , а поставить 00401000h) , тогда версия отображеться (но сам файл не грузиться :)

А по правом клику (для Version Info) модуль загружаеться именно как DATAFILE . Но иконка файла ищеться через SHGetFileInfo , а там модуль загружаеться как обычно , если также исправить макрос и для иконок , то RVA уже будут не те и иконка пропадёт .

Палка двухконцовая , короче лучше делать ресурсы в начале секции и не е.м.

А всё потому , что в дубовом LoadResource при расчёте учавствуют эти RVA , начало секции и смещение таблицы ресурсов . А они и не сходяться , т.к. есть разница грузить файл (как есть на винте) тупо в память например по адресу 40000h , или грузить PE header по 40000h , а секцию по 401000h .

<< . 1 . 2 .


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.057