由汇编代码确定switch语句

cpp 复制代码
int  switch2(int x)  
{
   int result=0;
   switch(x)
   {
      /* switch语句主体缺失 */
   }
   return result;
}

在编译函数时,GCC为程序的初始部分以及跳转表生成了如下汇编代码。

1 MOVL 8(%ebp), %eax ;x位于相对于寄存器%ebp偏移量为8的地方。

2 ADDL $2, %eax

3 CMPL $6, %eax

4 JA .L2

5 JMP *.L8(,%eax,4)

由1、2、3和4行,有, 所以x的取值为-2、-1、0、1、2、3和4。

由JA .L2和.LONG .L2,知-1为缺省值。

标号.L6有2和3两个情况标号值。

switch2的跳转表

.L8

.LONG .L3

.LONG .L2

.LONG .L4

.LONG .L5

LONG .L6

.LONG .L6

.LONG .L7

.L8是分配地址的起始标号,与这个标号对应的地址会作为间接跳转(第5行)的基地址。

相关推荐
南玖yy1 天前
Linux 桌面市场份额突破 5%:开源生态的里程碑与未来启示
linux·运维·服务器·汇编·科技·开源·gradle
GeekMax2 天前
(笔记)U-boot 2012.10 armv7启动汇编解析
汇编
南玖yy4 天前
Linux权限管理:从“Permission denied“到系统安全大师
linux·运维·汇编·后端·架构·系统安全·策略模式
Kira Skyler4 天前
c++,从汇编角度看lambda
汇编·c++
暗流者5 天前
学习pwn需要的基本汇编语言知识
汇编·学习·网络安全·pwn
单车少年ing8 天前
ARM64---C中调用汇编指令
汇编
无小道9 天前
函数返回值问题,以及返回值的使用问题(c/c++)
c语言·开发语言·汇编·c++
菜菜why11 天前
详细解析单片机启动汇编文件:以startup_stm32f407xx.s为例
汇编·单片机·嵌入式硬件·嵌入式软件
马里奥的蘑菇云12 天前
ARM GCC内联汇编
汇编·arm
AI迅剑12 天前
模块三:现代C++工程实践(4篇)第二篇《性能调优:Profile驱动优化与汇编级分析》
汇编·c++