ret指令后的lea指令是什么意思?

时间:2015-10-30 03:55:25

标签: c gcc assembly x86

我在使用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指令用于什么? jmp指令没有lea条指令。

我的环境是Ubuntu 12.04 32位和gcc 4.6.3。

1 个答案:

答案 0 :(得分:3)

它可能不是什么 - 它只是填充让下一个函数从一个可能是至少8的倍数(很可能是16)的地址开始。

根据代码的其余部分,可能它实际上是一个表。例如,switch语句的某些实现使用通常存储在代码段中的常量表(严格来说,它更像是数据而不是代码)。

第一种情况更有可能。另外,这样的空间通常用0x03填充。这是一个单字节的调试中断指令,因此如果某些未定义的行为导致尝试执行该代码,它会立即停止执行并中断调试器(如果可用)。