gpt4 book ai didi

gcc - x86_64 汇编器中 64 位指针如何放入 4 个字节

转载 作者:行者123 更新时间:2023-12-04 14:25:07 25 4
gpt4 key购买 nike

我目前正在阅读以下博客以了解如何编写汇编程序。博客里的东西我都看懂了,但是有一点我想不通。

https://www.recurse.com/blog/7-understanding-c-by-learning-assembly

代码:

0x0000000100000f50 <main+0>:    push   %rbp
0x0000000100000f51 <main+1>: mov %rsp,%rbp
0x0000000100000f54 <main+4>: mov $0x0,%eax
0x0000000100000f59 <main+9>: movl $0x0,-0x4(%rbp)

我不明白为什么我们可以将零写入 -0x4(%rbp)。在第 1 行,我们将保存在寄存器 %rbp 中的指针压入堆栈。由于 %rbp 寄存器大小是 64 位,我稍后预计我们必须将零写入堆栈中的位置 -0x8(%rbp) 而不是 -0x4(%rbp),它只有 4 个字节(32 位)。

谁能解释一下?

提前致谢。

最佳答案

因为 %rsp%rbp 在这一点上是相等的,-0x4(%rbp)下面 堆栈指针,在红色区域。这是信号处理程序(和调试器)未触及的区域,因此即使它位于堆栈指针下方也可以使用。

并且 movl 指令存储一个 int,一个 32 位的量,而不是一个 64 位的机器字。

关于gcc - x86_64 汇编器中 64 位指针如何放入 4 个字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47541318/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com