J'ai dû implémenter une convention d'appel cdecl dans ce programme qui utilisait à l'origine une convention non standardisée. Pour autant que je peux dire qu'il semble correct, mais je reçois une erreur d'exception non gérée en disant "Accusé de violation d'écriture emplacement 0x00000066, qui semble frapper quand le programme descend à la ligne" pas byte ptr [eax] "ou au moins c'est où la flèche après la rupture du programme.Cryptage simple Programme d'assemblage - violation d'accès d'écriture à l'emplacement de la mémoire
quelqu'un pourrait-il me dire ce qui ne va pas avec mon programme et comment je peux résoudre ce problème? Merci.
void encrypt_chars (int length, char EKey)
{ char temp_char;
for (int i = 0; i < length; i++)
{
temp_char = OChars [i];
__asm {
push eax
movzx eax, temp_char
push eax
lea eax, EKey
push eax
call encrypt
mov temp_char, al
pop eax
}
EChars[i] = temp_char;
return;
// Inputs: register EAX = 32-bit address of Ekey,
// ECX = the character to be encrypted (in the low 8-bit field, CL).
// Output: register EAX = the encrypted value of the source character (in the low 8-bit field, AL).
__asm {
encrypt:
push ebp
mov ebp, esp
mov ecx, 8[ebp]
mov eax, 12[ebp]
push edi
push ecx
not byte ptr[eax]
add byte ptr[eax], 0x04
movzx edi, byte ptr[eax]
pop eax
xor eax, edi
pop edi
rol al, 1
rol al, 1
add al, 0x04
mov esp, ebp
pop ebp
ret
}
Avez-vous essayé le déboguer? Je suppose qu'il y a aussi des débogueurs pour le code d'assemblage. – sashoalm
Lol Hallam étudiant? –