【发布时间】:2015-10-30 03:55:25
【问题描述】:
我在使用 clang 和 gcc 制作的可执行文件中发现了 x86 lea 指令。
lea 指令在ret 指令之后,如下所示。
0x???????? <func>
...
pop %ebx
pop %ebp
ret
lea 0x0(%esi,%eiz,1),%esi
lea 0x0(%edi,%eiz,1),%edi
0x???????? <next_func>
...
这些lea 指令是做什么用的? lea 指令中没有 jmp 指令。
我的环境是 Ubuntu 12.04 32 位和 gcc 4.6.3。
【问题讨论】:
-
你也可以打印二进制代码吗?
-
我建议用
gcc -fverbose-asm -O -S foo.c编译你的C 源代码foo.c,然后查看生成的汇编程序foo.s。我猜lea实际上是你代码段中的一些数据 -
是的 - 一些 const/static 的东西。
-
顺便说一句,你的 Ubuntu 已经很老了,你的 GCC 编译器也太老了。当前的 GCC 是 5.2。