【发布时间】:2010-10-13 11:57:18
【问题描述】:
_memcpy_r SEGMENT
memcpy_r PROC
mov r10, rdi
mov r11, rsi
mov rdi, rcx
mov rsi, rdx
mov rcx, r8
shr rcx, 3
rep movsq
mov rcx, r8
and rcx, 7
rep movsb
mov rsi, r11
mov rdi, r10
ret
memcpy_r ENDP
_memcpy_r ENDS
END
我在 Visual Studio 2010 项目中使用的 .asm 文件中有上述代码。它设置为使用 Microsoft 宏汇编程序 (ml64.exe) 进行编译。 程序崩溃并在过程的第一行 (mov r10, rdi) 出现访问冲突异常。有谁知道为什么?
编辑:我应该澄清一下。如果我删除第一行,下一行仍然会发生异常。如果我删除它,它会发生在下一个 (mov rdi, rcx)。
【问题讨论】:
-
r10寄存器是否存在于 x86-64 平台上?我真的在问......从来没有见过这个......您是否尝试过将r10的所有引用更改为rax? -
我原来有 push rdi,但我仍然得到了异常。另外,如果 r10 不存在,它将无法编译。
-
是的,如果 src 或 dst 无效,或者 count 为负数或太大,
memcopy()可能会崩溃。 -
我确定 src 和 dst 是有效的,并且计数是正数。更重要的是,错误发生在第一行,我所做的只是保留 rdi(在我对任何参数做任何事情之前)。
标签: assembly x86 64-bit x86-64