【发布时间】:2013-11-14 00:16:58
【问题描述】:
gcc 编译二进制有以下程序集:
8049264: 8d 44 24 3e lea 0x3e(%esp),%eax
8049268: 89 c2 mov %eax,%edx
804926a: bb ff 00 00 00 mov $0xff,%ebx
804926f: b8 00 00 00 00 mov $0x0,%eax
8049274: 89 d1 mov %edx,%ecx
8049276: 83 e1 02 and $0x2,%ecx
8049279: 85 c9 test %ecx,%ecx
804927b: 74 09 je 0x8049286
乍一看,我根本不知道它在做什么。我最好的猜测是某种内存对齐和清除局部变量(因为 rep stos 在局部变量位置填充 0)。如果你看一下前几行,将地址加载到 eax 并移动到 ecx 并测试它是否是偶数地址,但我不知道为什么会这样。我想知道这里到底发生了什么。
【问题讨论】: