![]() |
eXeL@B —› Программирование —› Вопрос по макросу (MASM) |
Посл.ответ | Сообщение |
|
Создано: 10 декабря 2012 20:22 · Поправил: Rainbow · Личное сообщение · #1 Уважаемые знатоки, некоторое время назад начал осваивать макросредства масма. Взялся писать макрос, который шифрует на этапе компиляции строку, передаваемую на входе, обычным побайтовым XOR'ом, но не тут-то было.. Завалило ошибками.. макрос выглядит следующим образом INIT_CRYPTED_STRING macro String:REQ, Variable:REQ, Key:REQ ; Здесь Variable - адрес переменной local Pos, Char, abc Pos = 0 % forc Char, <String> mov byte ptr ds:[Variable+Pos], Char xor Key Pos = Pos + 1 endm endm Какие только комбинации не перепробовал. Масмовские мануалы на англейском перечитал раз 10.. Как следует из них, forc циклично запихивает в Char символ, а % дает возможность работать с числами. Но тогда почему не рабротает ??? Неужели нету способа перевести Char в ASCII-код и работать с кодом символа строки непосредственно ? Я думаю смысл вопроса понятен? Подскажите плз, как решить данную проблему, ее вообще с forc решить можно ? ![]() |
|
Создано: 10 декабря 2012 21:08 · Личное сообщение · #2 |
|
Создано: 10 декабря 2012 21:13 · Поправил: Rainbow · Личное сообщение · #3 |
|
Создано: 10 декабря 2012 21:48 · Личное сообщение · #4 1. у тебя макрос не знает длину строки и кея 2. макрос не знает куда ему эту строку записывать , после Pos = 0 должно быть .data Rainbow пишет: так это же процедура, а не макрос.. так заюзай его из макроса, что-то типа(не проверял): INIT_CRYPTED_STRING macro str,str_len,key,key_len,Variable:VARARG invoke XorData,str,str_len,key,key_len .data Variable db str endm ![]() |
|
Создано: 10 декабря 2012 21:55 · Личное сообщение · #5 Vovan666 пишет: у тебя макрос не знает длину строки и кея FORC знает. Цикл выполняется столько раз, сколько символов в изначальной строке Syntax: FORC parameter, <string> statements ENDM Description: Repeats <statements> once for each character in the string. The character replaces <parameter> in each repetition. IRPC is a synonym for FORC and is included for compatibility with previous versions of the assembler. Parameter Description parameter A valid symbol name. If <parameter> appears in statements, then it is replaced by a different character each iteration. string A literal string or a symbol defined with a string equate. All spaces are counted as characters. Angle brackets are required. statements Any valid assembler statements. P.S. Цитата из \Masm32\help\masm32.hlp mov byte ptr ds:[Variable+Pos], Char xor Key будет ассемблироваться столько раз, сколько символов в строке, соответственно Pos будет инкрементироваться, а Variable - постоянный аргумент макроса ![]() |
|
Создано: 11 декабря 2012 01:08 · Личное сообщение · #6 |
![]() |
eXeL@B —› Программирование —› Вопрос по макросу (MASM) |