从我读过的内容来看mov,它将第二个参数复制到第一个参数中.然后,这是做什么的?
movl 8(%ebp), %edx
它将edx中的任何内容复制到函数的第一个参数(因为+8的偏移量ebp是参数)?
我觉得这真正意味着将第一个参数移动到edx寄存器中,但我在维基百科上读到它是另一种方式?
我知道你可以通过使用gdb查看$ ebp的正偏移来找到任何参数:
(gdb) x/4wx $ebp
Run Code Online (Sandbox Code Playgroud)
然后,我会查看使用的第3和第4个地址,x/s因为它们将是第一个和第二个参数.局部变量怎么样?我如何看待$ ebp的负偏移值?另外,无论如何看看$ eax的价值?每当我尝试打印$ eax的值时x/s $eax,地址超出范围或值为0,我确信这不是因为我只是在寄存器中放入一个常量值.
我试过,info locals但我收到消息"没有符号表信息可用".
可能的重复:
memcpy 与 memmove
memmove实际上“移动”了一块内存吗?如果是这样,内存中是否会留下零?或者,它就像memcpy一样吗?我正在查看手册页,我不相信我的假设是正确的。如果我想使用 memmove 移动一块内存,我是否必须手动将移动的内存块清零?
我试图通过使用以下代码将名为"Holder"的结构放入堆中,但是当我尝试使用memcpy时出现分段错误:
Holder hold;
Holder *heapHold = memcpy(heapHold, &hold, sizeof(Holder));
Run Code Online (Sandbox Code Playgroud)
为什么我会出现段错误?