如何解释这个地址 -0x80(%rbp,%rax,4)

Posted

技术标签:

【中文标题】如何解释这个地址 -0x80(%rbp,%rax,4)【英文标题】:How to interpret this address -0x80(%rbp,%rax,4) 【发布时间】:2012-11-13 10:28:07 【问题描述】:

我目前正在尝试通过分析简单的 C 代码 sn-ps 来学习汇编语言(以及不同编译器选项的效果)。现在我偶然发现了以下说明:

mov %edx,-0x80(%rbp,%rax,4)

我不明白的是目标地址-0x80(%rbp,%rax,4) 的表达式。 该指令在循环中为本地数组赋值。

【问题讨论】:

【参考方案1】:
-0x80(%rbp,%rax,4) = *(%rbp + %rax * 4 + (-0x80))

所以下面的指令:

mov %edx,-0x80(%rbp,%rax,4)

表示让CPU将寄存器%edx的值移动到地址(%rbp + %rax * 4 + (-0x80))的内存中,这是AT&T风格的汇编。

【讨论】:

【参考方案2】:

机器命令会将%edx的内容复制到%rbp + 4 * %rax - 0x80给出的地址。似乎%rax 持有该数组的索引,%rbp - 0x80 是基地址。

查看here 以更好地了解 AT&T 语法。

【讨论】:

感谢您的回答 - 链接真的很有帮助

以上是关于如何解释这个地址 -0x80(%rbp,%rax,4)的主要内容,如果未能解决你的问题,请参考以下文章

将较小大小的值移动到寄存器中

为啥 rbp 和 rsp 被称为通用寄存器?

x64: 如何做一个相对的 jmp *%rax?

[逆向][writeup]0ctf2015 r0ops

rax学习:实现一个简易的todolist

rsp rbp 寄存器用途