привет всем. нашел на форуме сорец макроса для того,чтобы получить строку поксоренную с некоторым ключом: EncryptText macro text:req LOCAL chipherByte chipherByte = 0AAh FORC plainByte, <&text> chipherByte = chipherByte xor '&plainByte' db cipherByte endm db 0 endm почитал руководство по проектированию макросов, но все равно не понятно,как мне определить переменную со значнием,которое выдаст этот макрос те чтоб было примерно так: Var1 EncryptText <PLAINSTRING> и еще в макросе самом непонятно: chipherByte = chipherByte xor '&plainByte' мы же здесь модифицируем chipherByte, а не то, что нам нужно,верно?
да символы ксорятся с переменной маской, зависящей от предшествующих символов т.е. Var1 EncryptText <PLAINSTRING> превратится в db 'P' xor 0AAh db 'L' xor ('P' xor 0AAh) db 'A' xor ('L' xor ('P' xor 0AAh)) ... ; надеюсь идея понятна db 0
то есть в Var1 db 'P' xor 0AAh db 'L' xor ('P' xor 0AAh) db 'A' xor ('L' xor ('P' xor 0AAh)) ... db 0 ЗЫ: Не хватает редактирования однако.
ага это ясно,спасибо, но если я пишу так .data szCaption EncryptText < PLAINSTRING > .code invoke .... , то мне масм выкидывает ошибку error A2008: syntax error : szCaption
Как вариант преврати имя в метку - функциональность не пострадает, а глюк должен исчезнуть szCaption: EncryptText < PLAINSTRING >
И ещё когда нужно отладить/изучить макрос удобно использовать ключ /Fl в коммандной строке в сочетании с директивами .NOLIST .LIST Код (Text): .NOLIST ; первым делом выключаем листинг чтобы не тормозило и *.lst не захламлялось ... .data .LIST szCaption EncryptText < PLAINSTRING > .NOLIST .code invoke .... В файле *.lst получишь развёртку когда сгенерированного нужным макросом, после отладки макроса лишние .LIST .NOLIST уберёшь, чтобы листинг не захламляли и кодогенерацию не тормозили.