Я следующий код, который должен XOR блок памяти:C/C++ Инлайн ASM неподходящий операнд типа
void XorBlock(DWORD dwStartAddress, DWORD dwSize, DWORD dwsKey)
{
DWORD dwKey;
__asm
{
push eax
push ecx
mov ecx, dwStartAddress // Move Start Address to ECX
add ecx, dwSize // Add the size of the function to ECX
mov eax, dwStartAddress // Copy the Start Address to EAX
crypt_loop: // Start of the loop
xor byte ptr ds:[eax], dwKey // XOR The current byte with 0x4D
inc eax // Increment EAX with dwStartAddress++
cmp eax,ecx // Check if every byte is XORed
jl crypt_loop; // Else jump back to the start label
pop ecx // pop ECX from stack
pop eax // pop EAX from stack
}
}
Однако аргумент dwKey дает мне ошибку. Код работает отлично, если, например, dwKey заменяется на 0x5D.
Что заставляет вас думать, что это быстрее, чем просто писать его на C или C++? И не имеет значения, насколько быстро это происходит, учитывая, что шифр Цезаря может быть разбит за миллисекунды. –
Является ли 'DWORD dwsKey' опечаткой. Похоже, что лишние 's' являются ошибкой? а затем удалить локальную переменную 'DWORD dwKey;'? –
В чем смысл этого кода? Вы специально записываете медленный asm, чтобы остановить компилятор от использования 4-байтового xor или SSE2 PXOR? –