0x00000000004004b7 <func+31>: mov -0x18(%rbp),%rax
对于堆栈增长到较低地址的体系结构,上面提取-0x18(%rbp)~-0x20(%rbp)
;反之亦然。
这是真的吗?
如果是这样的话,技术原因是什么?
答案 0 :(得分:3)
通常,CPU不知道堆栈是如何实现的(通常由编译器决定)。
因此,在您的情况下,它会从地址%rbp-0x18
开始提取一个字。如果一个单词是4个字节,那么它将获取跨越{%rbp-0x18
,%rbp-0x17
,%rbp-0x16
,%rbp-0x15
}的单词。
答案 1 :(得分:2)
没有。事情二是无关的。一个是ISA的属性,另一个是平台的ABI。
顺便说一下,我不知道任何多字节访问不在升序地址上的架构。