MASM32 вопрос с макросом

Тема в разделе "WASM.ASSEMBLER", создана пользователем K10, 1 янв 2009.

  1. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    Есть такой макрос, динамически размещающий строку в секции .DATA?, при этом ее ксорит случайными байтами.
    Код (Text):
    1. xxStr MACRO txt
    2. LOCAL xxStrName
    3. LOCAL Len, i, bXor, bXored
    4.   %Len SIZESTR <txt> ;; source string length
    5.   .DATA?
    6.     xxStrName DB Len + 1 DUP(?) ;; резервирование буфера с секции неинициализированных данных
    7.   .CODE
    8.   i = 0
    9.   FORC cr, <txt>
    10.   IFE ('&cr' - 22h) ;; игнорирование кавычек
    11.     ELSE
    12.     %bXor = RANDOM_BYTE()
    13.     %bXored = bXor XOR '&cr' ;; поксоренный символ входной строки
    14.     @CatStr(MOV xxStrName[%i]!, %bXored)
    15.     @CatStr(XOR xxStrName[%i]!, %bXor)
    16.     i = i + 1
    17.     ENDIF
    18.   ENDM  
    19.   %bXor = RANDOM_BYTE()
    20.   @CatStr(MOV xxStrName[%i]!, %bXor) ;; завершающий "0"
    21.   @CatStr(XOR xxStrName[%i]!, %bXor) ;;
    22. EXITM <OFFSET xxStrName>
    23. ENDM
    Проблема возникает, когда в строке присутствуют обратные слеши, например xxStr("asdf\asdf"). Пробовал ставить перед слешем еще один слеш, знак "!", не помогает.
    Как правильно обработать этот момент в макросе?
     
  2. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    Код (Text):
    1.   IFE ('&cr' - 22h) ;; игнорирование кавычек "
    2.   ELSEIFE ('&cr' - 27h) ;; игнорирование кавычек '
    3.   ELSEIFE ('&cr' - 5Ch) ;; обработка \
    4.     %bXor = RANDOM_BYTE()
    5.     %bXored = bXor XOR 5Ch ;; поксоренный символ \
    6.     @CatStr(MOV xxStrName[%i]!, %bXored)
    7.     @CatStr(XOR xxStrName[%i]!, %bXor)
    8.     i = i + 1
    9.   ELSE
    10. ...
    а шифровать и тут же расшифровывать каждый символ это так задумано :))) или это просто для отладки?
     
  3. K10

    K10 New Member

    Публикаций:
    0
    Регистрация:
    3 окт 2008
    Сообщения:
    1.590
    Y_Mur
    Спасибо, как же я сразу не сообразил :))

    Это чтобы строки не светились в скомпиленном файле в открытом виде. Есть еще макрос, составляющий строки двордами, сдвинутыми на случайное значение.