Есть такой макрос, динамически размещающий строку в секции .DATA?, при этом ее ксорит случайными байтами. Код (Text): xxStr MACRO txt LOCAL xxStrName LOCAL Len, i, bXor, bXored %Len SIZESTR <txt> ;; source string length .DATA? xxStrName DB Len + 1 DUP(?) ;; резервирование буфера с секции неинициализированных данных .CODE i = 0 FORC cr, <txt> IFE ('&cr' - 22h) ;; игнорирование кавычек ELSE %bXor = RANDOM_BYTE() %bXored = bXor XOR '&cr' ;; поксоренный символ входной строки @CatStr(MOV xxStrName[%i]!, %bXored) @CatStr(XOR xxStrName[%i]!, %bXor) i = i + 1 ENDIF ENDM %bXor = RANDOM_BYTE() @CatStr(MOV xxStrName[%i]!, %bXor) ;; завершающий "0" @CatStr(XOR xxStrName[%i]!, %bXor) ;; EXITM <OFFSET xxStrName> ENDM Проблема возникает, когда в строке присутствуют обратные слеши, например xxStr("asdf\asdf"). Пробовал ставить перед слешем еще один слеш, знак "!", не помогает. Как правильно обработать этот момент в макросе?
Код (Text): IFE ('&cr' - 22h) ;; игнорирование кавычек " ELSEIFE ('&cr' - 27h) ;; игнорирование кавычек ' ELSEIFE ('&cr' - 5Ch) ;; обработка \ %bXor = RANDOM_BYTE() %bXored = bXor XOR 5Ch ;; поксоренный символ \ @CatStr(MOV xxStrName[%i]!, %bXored) @CatStr(XOR xxStrName[%i]!, %bXor) i = i + 1 ELSE ... а шифровать и тут же расшифровывать каждый символ это так задумано )) или это просто для отладки?
Y_Mur Спасибо, как же я сразу не сообразил ) Это чтобы строки не светились в скомпиленном файле в открытом виде. Есть еще макрос, составляющий строки двордами, сдвинутыми на случайное значение.