堆栈大小为 32,-16(%ebp) 和 16(%esp) 会引用相同的四个字节吗?
With a stack size of 32, would -16(%ebp) and 16(%esp) reference the same four bytes?
堆栈大小为 32,-16(%ebp)
和 16(%esp)
会引用相同的四个字节吗?假设我们只想一次读取或写入四个字节并且 esp
位于地址 0
.
根据我的阅读,ebp
read/write 的偏移量似乎从高地址到低地址,而 esp
的偏移量从低到高。因此,我的回答是不,它们不引用相同的四个字节。 -16(%ebp)
将引用字节 16
到 20
,而 16(%esp)
将引用字节 12
到 16
。这个假设是正确的还是我在这里完全错了?如果是正确的,为什么会存在这种差异?
如果"stack size of 32"表示%esp + 32 == %ebp
,那么-16(%ebp)
和16(%esp)
引用相同的地址,即%esp + 16
。因此,它们指的是相同的字节、字或双字——对象总是从计算出的地址开始读取并向更高的地址移动(即使偏移量表达式为负)。因此,您将读取字节 %esp + 16
到 %esp + 19
.
堆栈大小为 32,-16(%ebp)
和 16(%esp)
会引用相同的四个字节吗?假设我们只想一次读取或写入四个字节并且 esp
位于地址 0
.
根据我的阅读,ebp
read/write 的偏移量似乎从高地址到低地址,而 esp
的偏移量从低到高。因此,我的回答是不,它们不引用相同的四个字节。 -16(%ebp)
将引用字节 16
到 20
,而 16(%esp)
将引用字节 12
到 16
。这个假设是正确的还是我在这里完全错了?如果是正确的,为什么会存在这种差异?
如果"stack size of 32"表示%esp + 32 == %ebp
,那么-16(%ebp)
和16(%esp)
引用相同的地址,即%esp + 16
。因此,它们指的是相同的字节、字或双字——对象总是从计算出的地址开始读取并向更高的地址移动(即使偏移量表达式为负)。因此,您将读取字节 %esp + 16
到 %esp + 19
.