Сейчас на форуме: zds, UniSoft (+6 невидимых)

 eXeL@B —› Программирование —› Вопрос по макросу (MASM)
Посл.ответ Сообщение


Ранг: 110.8 (ветеран), 104thx
Активность: 0.090.01
Статус: Участник

Создано: 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 решить можно ?



Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 10 декабря 2012 21:08
· Личное сообщение · #2

\masm32\m32lib\xordata.asm

да и
mov byte ptr ds:[Variable+Pos], Char xor Key
Pos = Pos + 1
явно не в масмовском стиле, скорее всего не будет работать.




Ранг: 110.8 (ветеран), 104thx
Активность: 0.090.01
Статус: Участник

Создано: 10 декабря 2012 21:13 · Поправил: Rainbow
· Личное сообщение · #3

Vovan666 пишет:
\masm32\m32lib\xordata.asm


так это же процедура, а не макрос.. Моя цель на этапе компиляции иметь ЗАШИФРОВАННУЮ строку в exe непосредственно, и макрос, расшифровывающий в коде где надо. Конкретно цикл инструкций, заносящий в стек посимвольно зашифрованную строку - первый этап макроса



Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 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




Ранг: 110.8 (ветеран), 104thx
Активность: 0.090.01
Статус: Участник

Создано: 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 - постоянный аргумент макроса




Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 11 декабря 2012 01:08
· Личное сообщение · #6

CATSTR и отдельной строкой присвоение xor ?! В инете должны быть примеры.

Выложил бы уже короткий пример свой.

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube



 eXeL@B —› Программирование —› Вопрос по макросу (MASM)
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати