首页 > 试题广场 >

这个程序给你一个机会,从反汇编机器代码逆向工程一个switc

[问答题]

这个程序给你一个机会,从反汇编机器代码逆向工程一个switch语句。在下面这个过程中,去掉了switch语句的主体:

1 long switch_prob(long x, long n) {
2 long result = x;
3 switch(n) {
4 /* Fill in code here*/
5
6  }
7  return result;
8  }

图3-53给出了这个过程的反汇编机器代码。

跳转表驻留在内存的不同区域中。可以从第5行的间接跳转看出来,跳转表的起始地址为Ox 4006f8用调试器GDB,我们可以用命令x/6gx 0x4006f8来检查组成跳转表的6个8字节字的内 存。GDB打印出下面的内容:

(gdb)x/6gx 0x4006f8

0x4006f8:    0x00000000004005a1    0x00000000004005c3

0x400708:    0x00000000004005a1    0x00000000004005aa

0x400718:    0x00000000004005b2    0x00000000004005bf

用C代码填写开关语句的主体,使它的行为与机器代码一致。

这道题你会答吗?花几分钟告诉大家答案吧!