如何从汇编代码计算开关案例值?

时间:2013-01-30 05:02:31

标签: assembly x86 switch-statement att

ATT语法。

我正在努力理解我们在课堂上谈到的练习题。

我们为switch语句提供了以下部分汇编代码:

movl  8(%ebp), %eax
addl  $2, %eax
cmpl  $6, %eax
ja    .L2
jmp   *.L8(,%eax,4)

//rest of switch statement would go here

.L8
 .long   .L3
 .long   .L2
 .long   .L4
 .long   .L5
 .long   .L6
 .long   .L6
 .long   .L7

我知道第二部分是跳转表。我无法弄清楚的是如何计算原始C级开关的情况值。我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

分析代码。

函数的参数+ 2用作表的索引。因此,常量从-2开始,然后继续-1,0等等。

最大常数为4,参见检查参数+ 2> 6,或等效地,对于参数> 4.表格中的元素数量也反映了这一点。