Нашел, что не так. Нашел, и не нашел. Макрос FASM: macro code2ascii from,size,to { _fr = from _to = to repeat size load b byte from _fr ;Здесь операции, в которых байт шифруется, результат в ворд. ;Не привожу, так как не работает и в таком виде. Данный макрос ;просто должен разбивать каждый байт кода в слово. store word b at _to _to = _to + 1 _fr = _fr + 2 end repeat } _encs: db _ce-_cs dup ? _cs: ;Здесь валидный код, который работает, если убрать вызов макроса, ;и вставить на него jmp _ce: code2ascii _cs, _ce-_cs, _encs Пробовал так пошифровать, но этот макрос портит смещения, причем только когда format PE GUI 4.0 DLL, екзешник работает (расшифровывает нормально, с оригинальными смещениями). Каким образом портит? Видимо, прообраз кода сперва перемещается к метке _encs с помощью макроса, после этого пересчитываются смещения, а только затем - код пишется в выходной файл. Как указать препроцессору работать с бинарным кодом? Можно, конечно, написать внешнюю программу, которая все это дело переместит сама, но некрасиво.
Не объявлена ф-ция UCanvas.DrawTextTTFToCanvas PROTO UCanvas:rawTextTTFToCanvas() name '?DrawTextTTFToCanvas@UCanvas@@QAEHHHPBGPBVFontDrawInfo@@EHHPBV?$TArray@PAVFontDrawInfoSection@@@@@Z' from ENGINE.DLL Это MASM? Может, так: PROTO UCanvas.Dra ... ? - - - - Нет примера макроса, который бы изменял данные, но не "переделывал" смещения?