【发布时间】:2014-05-20 16:03:47
【问题描述】:
我反汇编了一个程序(使用objdump -d a.out),现在我想了解一行中的不同部分是什么样的
400586: 48 83 c4 08 add $0x8,%rsp
代表。更具体地说,我想知道如何查看添加两个寄存器使用了多少字节。我的想法是add $0x8,%rsp 中的0x8(十进制为 8)给了我 2 * 4 所以 2 个字节用于添加 2 个寄存器。对吗?
PS:编译器是gcc,操作系统是suse linux
【问题讨论】:
-
您应该阅读英特尔手册。它列出了所有指令和操作码
-
不同的指令形式有不同的操作码。并且 AX 上的操作具有特殊的更短的操作码
-
为自己节省大量时间。获取一本关于 x86 汇编语言的好书并学习它。该指令不添加两个寄存器。它将立即值 8 添加到堆栈指针。几乎所有 x86 指令都允许不同的寻址模式(寄存器、索引、索引偏移、基本索引偏移、直接等)。
add指令中的字节数取决于其操作数的寻址方式。
标签: gcc assembly compiler-construction disassembly att