由汇编代码确定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行)的基地址。

相关推荐
qwertyuiop_i18 小时前
汇编(函数调用)
汇编·windows·函数调用
南玖yy20 小时前
深入理解 x86 汇编中的符号扩展指令:从 CBW 到 CDQ 的全解析
开发语言·汇编·arm开发·后端·架构·策略模式
iCxhust21 小时前
汇编字符串比较函数
c语言·开发语言·汇编·单片机·嵌入式硬件
君鼎2 天前
汇编常见指令
汇编
鹅是开哥2 天前
ZZU-ARM汇编语言实验 3&4
汇编·arm开发
foDol3 天前
C++ 中的尾调用优化TCO:原理、实战与汇编分析
汇编·c++·性能优化
南玖yy6 天前
硬盘寻址全解析:从 CHS 三维迷宫到 LBA 线性王国
汇编·硬件架构·lba模式·chs模式
染指11107 天前
35.x64汇编写法(二)
汇编·windows·x64游戏·x64汇编·游戏攻防
Jacen.L8 天前
逆向工程开篇(连载中)
汇编