__asm { //
push eax //
push ecx //
movsx ecx, temp_char //
lea eax, EKey //
call encryptX // encrypt the character
mov temp_char, al //
pop ecx //
pop eax //
}
EChars[i] = temp_char; // Store encrypted char in the encrypted chars array
}
return;
// ---------------------------- start of ASM code ---------------------------------------------------------------encryptX: push ecx //push to manipulate
xchg eax, ecx //exchange values in eax and ecx / eax holds old ecx
neg al //twos complement least most eax byte (old ecx)
ror al, 1 //rotate right least most byte by 1 of eax
xor al, byte ptr[ecx] //exlcusive or least most byte against ecx value being pointed at
push edx //push edx onto stack for manipulatio
mov edx, eax //move eax into edx
xchg eax, ecx //swap values of ecx and eax
rol byte ptr[eax], 3 //rotate left the byte being pointed at 3 times
xor dl, byte ptr[eax] //xor the least byte by pointed value in eax
rol dl, 2 //rotate left the least byte in edx by 2
mov eax, edx //move edx value into eax
pop edx //pop values out
pop ecx //pop values out
ret //return
}
у меня есть задача реализации стандартного вызова в этом коде — будь то вызов cdecl или std
‘mov eax, [ebp + 8] // получить первый параметр, который был передан’
Я понимаю идею нажатия на указатели, но я не уверен, где бы я указывал указателю искать.
будь то mov eax, [ebp + 4/8/12] или что у тебя
любая помощь в объяснении того, как я это сделаю, будет принята с благодарностью, так же, если один из вас, добрый народ, решит это, можно добавить объяснение
Спасибо
Задача ещё не решена.