确定以下汇编代码的输出

时间:2010-11-07 02:36:13

标签: assembly

转储函数phase_1的汇编程序代码:

0x08048bcc <phase_1+0>: push   %ebp
0x08048bcd <phase_1+1>: mov    %esp,%ebp
0x08048bcf <phase_1+3>: sub    $0x10,%esp
0x08048bd2 <phase_1+6>: push   $0x8049808
0x08048bd7 <phase_1+11>:        pushl  0x8(%ebp)
0x08048bda <phase_1+14>:        call   0x8048f9c(strings_not_equal)
0x08048bdf <phase_1+19>:        add    $0x10,%esp
0x08048be2 <phase_1+22>:        test   %eax,%eax
0x08048be4 <phase_1+24>:        je     0x8048beb(phase_1+31)
0x08048be6 <phase_1+26>:        call   0x804951c(explode_bomb)
0x08048beb <phase_1+31>:        leave
0x08048bec <phase_1+32>:        ret

转储函数strings_not_equal:

的汇编代码转储
0x08048f9c <strings_not_equal+0>:       push   %ebp
0x08048f9d <strings_not_equal+1>:       mov    %esp,%ebp
0x08048f9f <strings_not_equal+3>:       push   %edi
0x08048fa0 <strings_not_equal+4>:       push   %esi
0x08048fa1 <strings_not_equal+5>:       push   %ebx
0x08048fa2 <strings_not_equal+6>:       mov    0x8(%ebp),%esi
0x08048fa5 <strings_not_equal+9>:       mov    0xc(%ebp),%edi
0x08048fa8 <strings_not_equal+12>:      push   %esi
0x08048fa9 <strings_not_equal+13>:      call   0x8048f83(string_length)
0x08048fae <strings_not_equal+18>:      mov    %eax,%ebx
0x08048fb0 <strings_not_equal+20>:      push   %edi
0x08048fb1 <strings_not_equal+21>:      call   0x8048f83 (string_length)
0x08048fb6 <strings_not_equal+26>:      add    $0x8,%esp
0x08048fb9 <strings_not_equal+29>:      mov    $0x1,%edx
0x08048fbe <strings_not_equal+34>:      cmp    %eax,%ebx
0x08048fc0 <strings_not_equal+36>:      jne    0x8048fe6 (strings_not_equal+74)
0x08048fc2 <strings_not_equal+38>:      jmp    0x8048fcb (strings_not_equal+47)
0x08048fc4 <strings_not_equal+40>:      mov    $0x1,%edx
0x08048fc9 <strings_not_equal+45>:      jmp    0x8048fe6 (strings_not_equal+74)
0x08048fcb <strings_not_equal+47>:      mov    %esi,%edx
0x08048fcd <strings_not_equal+49>:      mov    %edi,%ecx
0x08048fcf <strings_not_equal+51>:      cmpb   $0x0,(%esi)
0x08048fd2 <strings_not_equal+54>:      je     0x8048fe1 (strings_not_equal+69)
0x08048fd4 <strings_not_equal+56>:      mov    (%edx),%al
0x08048fd6 <strings_not_equal+58>:      cmp    (%ecx),%al
0x08048fd8 <strings_not_equal+60>:      jne    0x8048fc4 (strings_not_equal+40)
0x08048fda <strings_not_equal+62>:      inc    %edx
0x08048fdb <strings_not_equal+63>:      inc    %ecx
0x08048fdc <strings_not_equal+64>:      cmpb   $0x0,(%edx)
0x08048fdf <strings_not_equal+67>:      jne    0x8048fd4 (strings_not_equal+56)
0x08048fe1 <strings_not_equal+69>:      mov    $0x0,%edx
0x08048fe6 <strings_not_equal+74>:      mov    %edx,%eax
0x08048fe8 <strings_not_equal+76>:      lea    0xfffffff4(%ebp),%esp
0x08048feb <strings_not_equal+79>:      pop    %ebx
0x08048fec <strings_not_equal+80>:      pop    %esi
0x08048fed <strings_not_equal+81>:      pop    %edi
0x08048fee <strings_not_equal+82>:      leave
0x08048fef <strings_not_equal+83>:      ret

1 个答案:

答案 0 :(得分:4)

首先,您应该将此标记为作业或至少在问题中提及(我认为“家庭作业”现在可能被视为不受欢迎的元标记 - 我不确定)。我在大学时就完成了这项任务,实际上我觉得我的笔记本电脑上还有它。你应该真的对此保持警惕,因为在提供直接和准确的家庭作业问题答案时,SO一般都不赞同。人们非常愿意提供帮助,但透明度很高。

回答您的实际问题:您发布的代码没有输出。它不打印任何东西。 phase_1所做的只是调用字符串比较函数,然后如果没有输入正确的密码则“爆炸”。

我猜这个问题的意思是“strings_not_equal函数在比较中使用了什么字符串?”由于分配的全部内容是使用调试器和逆向工程技术来确定每个阶段的密码,因此我将把它作为练习留给读者。