KeSqueer Понятно. Для начала: То есть, ошибка возникает в случае попытки интерпретации адреса как число. Как обойти: Код (Text): macro mov op1*, op2* { local imm, val imm = 0 if(op2 eqtype 0) virtual at 0 dd op2 load val dword from 0 end virtual if val <= 0x7F & val >= -0x80 imm = 1 end if end if if op1 eqtype ptr & op2 eqtype ptr push op2 pop op1 else if (op1 eqtype eax & imm <> 0) push op2 pop op1 else mov op1, op2 end if } Правда, полезность этого макроса сомнительна, но раз уж хочется поиграться..
Ничего подобного. Замена в fasm/examples/DIALOG/dialog.asm Код (Text): section '.idata' import data readable writeable на блок Код (Text): data import end data и Код (Text): section '.rsrc' resource data readable на Код (Text): data resource end data великолепно работает (и без выравнивания). главное, не забыть что импорты лежат в readable writeable области, а ресурсам достаточно readable. p.s. С иконкой не так. В винде есть бага (или была, не знаю исправлена ли), из-за которой иконку надо выкладывать обязательно в .rsrc секцию.
Uri2, выравнивание перед data resource обязательно для ресурсов с диалогами (по крайней мере, в 98), и ещё ресурсы с version info должны обязательно лежать в начале секции. Про иконку впервые слышу.
Это где? Было отрицание того, что нужна обязательная секция .rsrc и пример без секции с рабочими ресурсами.
Uri2 потрудитесь протестировать под всеми существующими виндами начиная с вин98 имя секции ресурсов "прошито" в одной из системных длл, но я забыл в какой точно о проблемах с иконкой разве не вы написали? иконка - не ресурсы?
Asterix, вы, наверное, про typelib-ы, которые только в «.rsrc» должны лежать (имя секции «прошито» в OLEAUT32.DLL, это из статьи «Об упаковщиках в последний раз»), но скажите, вы часто пишете программы на фасме, в которых есть typelib-ы?!
мы же не рассматриваем какую-то конкретную программу на какой-то конкретной системе, речь в общем про секцию ресурсов и особенностях ее расположения в файле, не нарушая принципов формата PE и с учетом особенностей Windows