【发布时间】:2013-11-19 02:58:55
【问题描述】:
我编写了一个简单的 32 位汇编代码:
movl $0x542412e6, %eax
movl %ebp , %edx
addl $0x30, %edx
movl %edx, %ebp
pushl 0x08048dd6
ret
当我运行这个命令时:
gcc -m32 -c e.s
我得到以下 18 个字节:
0: b8 e6 12 24 54 mov $0x542412e6,%eax
5: 89 ea mov %ebp,%edx
7: 83 c2 30 add $0x30,%edx
a: 89 d5 mov %edx,%ebp
c: 68 d6 8d 04 08 push $0x8048dd6
11: c3 ret
为什么目标代码是 18 字节而不是 20 或 16?对于 32 位机器,它不应该总是 4 字节的字吗?
【问题讨论】:
-
不。代码必须位于架构定义的边界上。这可能与机器的“字大小”有某种关系,但这种关系很少那么强。 (特别是 x86 指令集在 8 位和 16 位机器中具有继承性,并且存在一定程度的向前/向后兼容性。)
标签: gcc assembly x86 instructions