要一直跳过这个程序集的参数?

时间:2014-07-27 17:01:49

标签: c assembly

我正在教自己如何理解汇编代码,但需要一些帮助以确保我是否完全了解正在发生的事情。这是代码和我的评论。

编辑:什么参数将使这个功能"跳跃"一路走来?

我们在开始时有常规序言(此处未显示)。然后,我们在$ 0x804ae8d中存储%d%d,因为我在GDB中查看了这个值,那就是那里。

 804989e:       ba 8d ae 04 08          mov    $0x804ae8d,%edx
 80498a3:       8b 45 08                mov    0x8(%ebp),%eax
 80498a6:       8d 4d f0                lea    -0x10(%ebp),%ecx
 80498a9:       89 4c 24 0c             mov    %ecx,0xc(%esp)
 80498ad:       8d 4d f4                lea    -0xc(%ebp),%ecx
 80498b0:       89 4c 24 08             mov    %ecx,0x8(%esp)
 80498b4:       89 54 24 04             mov    %edx,0x4(%esp)
 80498b8:       89 04 24                mov    %eax,(%esp)

我相信在这一点(下面)它正在设置两个基本上被用于该功能的参数。这是扫描那些,并比较第一个参数,看它是否大于1.如果它大于1,那么它会跳到下一个部分。

 80498bb:       e8 b0 f3 ff ff          call   8048c70 <sscanf@plt>
 80498c0:       83 f8 01                cmp    $0x1,%eax
 80498c3:       7f 05                   jg     80498ca <level_2+0x32>

这里,它将两个参数加在一起并将它们加载到寄存器%eax中。然后在eax中比较这个新值,看它现在是否等于7100。

 80498ca:       8b 55 f4                mov    -0xc(%ebp),%edx
 80498cd:       8b 45 f0                mov    -0x10(%ebp),%eax
 80498d0:       01 d0                   add    %edx,%eax
 80498d2:       3d bc 1b 00 00          cmp    $0x1bbc,%eax
 80498d7:       74 07                   je     80498e0 <level_2+0x48>

然而,我不太确定这里发生了什么。我可以看到它可能是第二个参数并将其加载到eax寄存器中。但是,我不确定和测试je的相关性。

 80498e0:       8b 45 f4                mov    -0xc(%ebp),%eax
 80498e3:       8d 14 00                lea    (%eax,%eax,1),%edx
 80498e6:       8b 45 f4                mov    -0xc(%ebp),%eax
 80498e9:       21 d0                   and    %edx,%eax
 80498eb:       85 c0                   test   %eax,%eax
 80498ed:       74 07                   je     80498f6 <level_2+0x5e>

而且,在这里,我不确切地知道正在做什么。虽然我怀疑在两个参数之间可能存在一些比较。

 80498f6:       8b 55 f4                mov    -0xc(%ebp),%edx
 80498f9:       8b 45 f0                mov    -0x10(%ebp),%eax
 80498fc:       31 d0                   xor    %edx,%eax
 80498fe:       85 c0                   test   %eax,%eax
 8049900:       7e 05                   jle    8049907 <level_2+0x6f>

0 个答案:

没有答案