zu rekodieren Ich benutze Nasm auf Ubuntu 16.04, und ich versuche derzeit, die C memmove()
Funktion zu rekodieren.Ich versuche, memmove in asm
Hier ist mein Code:
char *str = strdup("Salutation");
printf("%s, %s\n", (char *)memmove(str + 3, str, 5), str);
Erwartete Ausgabe lautet::
Saluton, SalSaluton
Aber ich bekomme:
SalSaon, SalSalSaon
BITS 64
global memmove
memmove:
push rbp
mov rbp, rsp
xor rcx, rcx
while:
cmp rcx, rdx
je end
mov r10b, byte [rsi + rcx]
mov byte [rdi + rcx], r10b
inc rcx
jmp while
end:
mov rax, rdi
leave
ret
ich es auf diese Weise bin Aufruf
Aus einigen Gründen, wenn ich zum vierten Zeichen komme, geht es zurück zum Anfang meiner Zeichenfolge rsi
. Meine Frage ist warum? Was mache ich falsch?
PS: Das gleiche Problem passiert alle drei Zeichen, als ob es nicht weiter gehen könnte, und musste zurück zum ersten gehen.
Vielen Dank im Voraus.