function: mov eax,ebx
and ebx,1
shl ebx,2
jmp [ebx+Tab]
Tab: dd F1
dd F2
dd F3
dd F4
F4: sub eax,eax
F3: add eax,eax
F2: sub eax,eax
F1: ret
当ebx = Number - >应该返回eax中的Number,否则为0
答案 0 :(得分:3)
将eax的副本带入ebx,取最右边的数字(AND)=> 0或1,四倍(SHL)=> 0或4,通过跳转表跳转到计算地址=> F1或F4,如果F1(ebx为0,eax为偶数)返回原始eax,如果F2(ebx为4,eax不均匀)返回0(eax-eax)。
F3和F4未使用。
答案 1 :(得分:3)
and ebx,1
按位与运算,结果为0(如果ebx为偶数)或1(否则)
shl ebx,2
向左移2位(相当于乘以4)。 ebx现在为0或4。
jmp [ebx+Tab]
从Tab + ebx获取地址并跳转到该地址。 Tab是四个字节指针的数组,ebx是0或4,因此它指向第一个(F1)或第二个(F2)元素。
如果偶数跳转到F1(返回原始值),否则跳转到F2(清除eax并返回零)。