C 第三阶段二元炸弹组件

C 第三阶段二元炸弹组件,c,debugging,assembly,gdb,C,Debugging,Assembly,Gdb,我在反汇编这段代码时遇到了很大的困难。我理解函数调用3个输入,1个十进制和2个字符。我得出的结论是小数点是7,尽管我不能完全肯定这是正确的。我知道我必须在某个地方使用跳转表,我相信它在0x08048d50,我同样希望进行一些验证和更正,但我不确定如何键入命令 Dump of assembler code for function phase_3: 0x08048cfa <+0>: push %ebp 0x08048cfb <+1>: mov %esp

我在反汇编这段代码时遇到了很大的困难。我理解函数调用3个输入,1个十进制和2个字符。我得出的结论是小数点是7,尽管我不能完全肯定这是正确的。我知道我必须在某个地方使用跳转表,我相信它在0x08048d50,我同样希望进行一些验证和更正,但我不确定如何键入命令

Dump of assembler code for function phase_3:
0x08048cfa <+0>:    push   %ebp
0x08048cfb <+1>:    mov    %esp,%ebp
0x08048cfd <+3>:    sub    $0x38,%esp
=>  0x08048d00 <+6>:    movl   $0x0,-0xc(%ebp)
0x08048d07 <+13>:   lea    -0x12(%ebp),%eax
0x08048d0a <+16>:   mov    %eax,0x10(%esp)
0x08048d0e <+20>:   lea    -0x13(%ebp),%eax
0x08048d11 <+23>:   mov    %eax,0xc(%esp)
0x08048d15 <+27>:   lea    -0x10(%ebp),%eax
0x08048d18 <+30>:   mov    %eax,0x8(%esp)
0x08048d1c <+34>:   movl   $0x804a7ff,0x4(%esp)
0x08048d24 <+42>:   mov    0x8(%ebp),%eax
0x08048d27 <+45>:   mov    %eax,(%esp)
0x08048d2a <+48>:   call   0x8048960 <__isoc99_sscanf@plt>
0x08048d2f <+53>:   mov    %eax,-0xc(%ebp)
0x08048d32 <+56>:   cmpl   $0x2,-0xc(%ebp)
0x08048d36 <+60>:   jg     0x8048d3d <phase_3+67>
0x08048d38 <+62>:   call   0x8049675 <explode_bomb>
0x08048d3d <+67>:   mov    -0x10(%ebp),%eax
0x08048d40 <+70>:   cmp    $0x7,%eax
0x08048d43 <+73>:   ja     0x8048e56 <phase_3+348>
0x08048d49 <+79>:   mov    0x804a808(,%eax,4),%eax
0x08048d50 <+86>:   jmp    *%eax
0x08048d52 <+88>:   movb   $0x6d,-0x11(%ebp)
0x08048d56 <+92>:   movzbl -0x12(%ebp),%eax
0x08048d5a <+96>:   movsbl %al,%eax
0x08048d5d <+99>:   lea    0x20(%eax),%edx
0x08048d60 <+102>:  movsbl -0x11(%ebp),%eax
0x08048d64 <+106>:  cmp    %eax,%edx
0x08048d66 <+108>:  je     0x8048e61 <phase_3+359>
0x08048d6c <+114>:  call   0x8049675 <explode_bomb>
0x08048d71 <+119>:  jmp    0x8048e61 <phase_3+359>
0x08048d76 <+124>:  movb   $0x68,-0x11(%ebp)
0x08048d7a <+128>:  movzbl -0x12(%ebp),%eax
0x08048d7e <+132>:  movsbl %al,%eax
0x08048d81 <+135>:  lea    0x20(%eax),%edx
0x08048d84 <+138>:  movsbl -0x11(%ebp),%eax
---Type <return> to continue, or q <return> to quit---
0x08048d88 <+142>:  cmp    %eax,%edx
0x08048d8a <+144>:  je     0x8048e64 <phase_3+362>
0x08048d90 <+150>:  call   0x8049675 <explode_bomb>
0x08048d95 <+155>:  jmp    0x8048e64 <phase_3+362>
0x08048d9a <+160>:  movb   $0x63,-0x11(%ebp)
0x08048d9e <+164>:  movzbl -0x12(%ebp),%eax
0x08048da2 <+168>:  movsbl %al,%eax
0x08048da5 <+171>:  lea    0x20(%eax),%edx
0x08048da8 <+174>:  movsbl -0x11(%ebp),%eax
0x08048dac <+178>:  cmp    %eax,%edx
0x08048dae <+180>:  je     0x8048e67 <phase_3+365>
0x08048db4 <+186>:  call   0x8049675 <explode_bomb>
0x08048db9 <+191>:  jmp    0x8048e67 <phase_3+365>
0x08048dbe <+196>:  movb   $0x6f,-0x11(%ebp)
0x08048dc2 <+200>:  movzbl -0x12(%ebp),%eax
0x08048dc6 <+204>:  movsbl %al,%eax
0x08048dc9 <+207>:  lea    0x20(%eax),%edx
0x08048dcc <+210>:  movsbl -0x11(%ebp),%eax
0x08048dd0 <+214>:  cmp    %eax,%edx
0x08048dd2 <+216>:  je     0x8048e6a <phase_3+368>
0x08048dd8 <+222>:  call   0x8049675 <explode_bomb>
0x08048ddd <+227>:  jmp    0x8048e6a <phase_3+368>
0x08048de2 <+232>:  movb   $0x6d,-0x11(%ebp)
0x08048de6 <+236>:  movzbl -0x12(%ebp),%eax
0x08048dea <+240>:  movsbl %al,%eax
0x08048ded <+243>:  lea    0x20(%eax),%edx
0x08048df0 <+246>:  movsbl -0x11(%ebp),%eax
0x08048df4 <+250>:  cmp    %eax,%edx
0x08048df6 <+252>:  je     0x8048e6d <phase_3+371>
0x08048df8 <+254>:  call   0x8049675 <explode_bomb>
0x08048dfd <+259>:  jmp    0x8048e6d <phase_3+371>
0x08048dff <+261>:  movb   $0x76,-0x11(%ebp)
0x08048e03 <+265>:  movzbl -0x12(%ebp),%eax
0x08048e07 <+269>:  movsbl %al,%eax
0x08048e0a <+272>:  lea    0x20(%eax),%edx
0x08048e0d <+275>:  movsbl -0x11(%ebp),%eax
0x08048e11 <+279>:  cmp    %eax,%edx
0x08048e13 <+281>:  je     0x8048e70 <phase_3+374>
---Type <return> to continue, or q <return> to quit---
0x08048e15 <+283>:  call   0x8049675 <explode_bomb>
0x08048e1a <+288>:  jmp    0x8048e70 <phase_3+374>
0x08048e1c <+290>:  movb   $0x70,-0x11(%ebp)
0x08048e20 <+294>:  movzbl -0x12(%ebp),%eax
0x08048e24 <+298>:  movsbl %al,%eax
0x08048e27 <+301>:  lea    0x20(%eax),%edx
0x08048e2a <+304>:  movsbl -0x11(%ebp),%eax
0x08048e2e <+308>:  cmp    %eax,%edx
0x08048e30 <+310>:  je     0x8048e73 <phase_3+377>
0x08048e32 <+312>:  call   0x8049675 <explode_bomb>
0x08048e37 <+317>:  jmp    0x8048e73 <phase_3+377>
0x08048e39 <+319>:  movb   $0x6f,-0x11(%ebp)
0x08048e3d <+323>:  movzbl -0x12(%ebp),%eax
0x08048e41 <+327>:  movsbl %al,%eax
0x08048e44 <+330>:  lea    0x20(%eax),%edx
0x08048e47 <+333>:  movsbl -0x11(%ebp),%eax
0x08048e4b <+337>:  cmp    %eax,%edx
0x08048e4d <+339>:  je     0x8048e76 <phase_3+380>
0x08048e4f <+341>:  call   0x8049675 <explode_bomb>
0x08048e54 <+346>:  jmp    0x8048e76 <phase_3+380>
0x08048e56 <+348>:  movb   $0x69,-0x11(%ebp)
0x08048e5a <+352>:  call   0x8049675 <explode_bomb>
0x08048e5f <+357>:  jmp    0x8048e77 <phase_3+381>
0x08048e61 <+359>:  nop
0x08048e62 <+360>:  jmp    0x8048e77 <phase_3+381>
0x08048e64 <+362>:  nop
0x08048e65 <+363>:  jmp    0x8048e77 <phase_3+381>
0x08048e67 <+365>:  nop
0x08048e68 <+366>:  jmp    0x8048e77 <phase_3+381>
0x08048e6a <+368>:  nop
0x08048e6b <+369>:  jmp    0x8048e77 <phase_3+381>
0x08048e6d <+371>:  nop
0x08048e6e <+372>:  jmp    0x8048e77 <phase_3+381>
0x08048e70 <+374>:  nop
0x08048e71 <+375>:  jmp    0x8048e77 <phase_3+381>
0x08048e73 <+377>:  nop
0x08048e74 <+378>:  jmp    0x8048e77 <phase_3+381>
0x08048e76 <+380>:  nop
功能阶段_3的汇编程序代码转储:
0x08048cfa:推送%ebp
0x08048cfb:mov%esp,%ebp
0x08048cfd:子$0x38,%esp
=>0x08048d00:movl$0x0,-0xc(%ebp)
0x08048d07:lea-0x12(%ebp),%eax
0x08048d0a:mov%eax,0x10(%esp)
0x08048d0e:lea-0x13(%ebp),%eax
0x08048d11:mov%eax,0xc(%esp)
0x08048d15:lea-0x10(%ebp),%eax
0x08048d18:mov%eax,0x8(%esp)
0x08048d1c:movl$0x804a7ff,0x4(%esp)
0x08048d24:mov 0x8(%ebp),%eax
0x08048d27:mov%eax,(%esp)
0x08048d2a:调用0x8048960
0x08048d2f:mov%eax,-0xc(%ebp)
0x08048d32:cmpl$0x2,-0xc(%ebp)
0x08048d36:jg 0x8048d3d
0x08048d38:调用0x8049675
0x08048d3d:mov-0x10(%ebp),%eax
0x08048d40:cmp$0x7,%eax
0x08048d43:ja 0x8048e56
0x08048449:mov 0x804a808(,%eax,4),%eax
0x08048d50:jmp*%eax
0x08048d52:movb$0x6d,-0x11(%ebp)
0x08048d56:movzbl-0x12(%ebp),%eax
0x08048d5a:movsbl%al,%eax
0x08048d5d:lea 0x20(%eax),%edx
0x08048d60:movsbl-0x11(%ebp),%eax
0x08048464:cmp%eax,%edx
0x08048d66:je 0x8048e61
0x08048d6c:调用0x8049675
0x08048d71:jmp 0x8048e61
0x08048d76:movb$0x68,-0x11(%ebp)
0x08048d7a:movzbl-0x12(%ebp),%eax
0x08048d7e:movsbl%al,%eax
0x08048d81:lea 0x20(%eax),%edx
0x08048d84:movsbl-0x11(%ebp),%eax
---键入以继续,或键入q以退出---
0x08048d88:cmp%eax,%edx
0x08048A:je 0x8048e64
0x08048d90:调用0x8049675
0x08048d95:jmp 0x8048e64
0x08048d9a:movb$0x63,-0x11(%ebp)
0x08048d9e:movzbl-0x12(%ebp),%eax
0x08048da2:movsbl%al,%eax
0x08048da5:lea 0x20(%eax),%edx
0x08048da8:movsbl-0x11(%ebp),%eax
0x08048dac:cmp%eax,%edx
0x08048dae:je 0x8048e67
0x08048db4:调用0x8049675
0x08048db9:jmp 0x8048e67
0x08048dbe:movb$0x6f,-0x11(%ebp)
0x08048dc2:movzbl-0x12(%ebp),%eax
0x08048dc6:movsbl%al,%eax
0x08048dc9:lea 0x20(%eax),%edx
0x08048dcc:movsbl-0x11(%ebp),%eax
0x08048dd0:cmp%eax,%edx
0x08048dd2:je 0x8048e6a
0x08048dd8:调用0x8049675
0x08048ddd:jmp 0x8048e6a
0x08048de2:movb$0x6d,-0x11(%ebp)
0x08048de6:movzbl-0x12(%ebp),%eax
0x08048dea:movsbl%al,%eax
0x08048ded:lea 0x20(%eax),%edx
0x08048df0:movsbl-0x11(%ebp),%eax
0x08048df4:cmp%eax,%edx
0x08048df6:je 0x8048e6d
0x08048df8:调用0x8049675
0x08048dfd:jmp 0x8048e6d
0x08048dff:movb$0x76,-0x11(%ebp)
0x08048e03:movzbl-0x12(%ebp),%eax
0x08048e07:movsbl%al,%eax
0x08048e0a:lea 0x20(%eax),%edx
0x08048e0d:movsbl-0x11(%ebp),%eax
0x08048e11:cmp%eax,%edx
0x08048e13:je 0x8048e70
---键入以继续,或键入q以退出---
0x08048e15:调用0x8049675
0x08048e1a:jmp 0x8048e70
0x08048e1c:movb$0x70,-0x11(%ebp)
0x08048e20:movzbl-0x12(%ebp),%eax
0x08048e24:movsbl%al,%eax
0x08048e27:lea 0x20(%eax),%edx
0x08048e2a:movsbl-0x11(%ebp),%eax
0x08048e2e:cmp%eax,%edx
0x08048e30:je 0x8048e73
0x08048e32:调用0x8049675
0x08048e37:jmp 0x8048e73
0x08048e39:movb$0x6f,-0x11(%ebp)
0x08048e3d:movzbl-0x12(%ebp),%eax
0x08048e41:movsbl%al,%eax
0x08048e44:lea 0x20(%eax),%edx
0x08048e47:movsbl-0x11(%ebp),%eax
0x08048e4b:cmp%eax,%edx
0x08048e4d:je 0x8048e76
0x08048e4f:调用0x8049675
0x08048e54:jmp 0x8048e76
0x08048e56:movb$0x69,-0x11(%ebp)
0x08048e5a:调用0x8049675
0x08048e5f:jmp 0x8048e77
0x08048e61:否
0x08048e62:jmp 0x8048e77
0x08048e64:否
0x08048e65:jmp 0x8048e77
0x08048e67:否
0x08048e68:jmp 0x8048e77
0x08048e6a:否
0x08048e6b:jmp 0x8048e77
0x08048e6d:否
0x08048e6e:jmp 0x8048e77
0x08048e70:否
0x08048e71:jmp 0x8048e77
0x08048e73:否
0x08048e74:jmp 0x8048e77
0x08048e76:否
0x08048d49:mov 0x804a808(,%eax,4),%eax
此语法表示:将
0x804a808+4*%eax
移动到
%eax
中。这将帮助您确定下一行中的跳转地址

0x08048d49 <+79>:   mov    0x804a808(,%eax,4),%eax