Bomb Lab Phase 1-5

This commit is contained in:
cyp0633 2022-04-05 23:17:23 +08:00
parent f1034e9a82
commit 05f33d22bc
Signed by: cyp0633
GPG Key ID: E1BC508A994A5138
4 changed files with 81 additions and 49 deletions

8
LAB3-bomblab/bomb.bp Normal file
View File

@ -0,0 +1,8 @@
break phase_2
disable $bpnum
break *0x8048c02
disable $bpnum
break explode_bomb
break *0x8048bcd
disable $bpnum
break *0x8048c52

View File

@ -493,39 +493,39 @@ Disassembly of section .text:
8048d5b: c3 ret
08048d5c <func4>:
8048d5c: 56 push %esi
8048d5c: 56 push %esi ;save registers
8048d5d: 53 push %ebx
8048d5e: 83 ec 14 sub $0x14,%esp
8048d61: 8b 54 24 20 mov 0x20(%esp),%edx
8048d65: 8b 44 24 24 mov 0x24(%esp),%eax
8048d69: 8b 5c 24 28 mov 0x28(%esp),%ebx
8048d6d: 89 d9 mov %ebx,%ecx
8048d6f: 29 c1 sub %eax,%ecx
8048d71: 89 ce mov %ecx,%esi
8048d73: c1 ee 1f shr $0x1f,%esi
8048d76: 01 f1 add %esi,%ecx
8048d78: d1 f9 sar %ecx
8048d7a: 01 c1 add %eax,%ecx
8048d7c: 39 d1 cmp %edx,%ecx
8048d7e: 7e 17 jle 8048d97 <func4+0x3b>
8048d80: 83 e9 01 sub $0x1,%ecx
8048d83: 89 4c 24 08 mov %ecx,0x8(%esp)
8048d87: 89 44 24 04 mov %eax,0x4(%esp)
8048d8b: 89 14 24 mov %edx,(%esp)
8048d8e: e8 c9 ff ff ff call 8048d5c <func4>
8048d93: 01 c0 add %eax,%eax
8048d95: eb 20 jmp 8048db7 <func4+0x5b>
8048d97: b8 00 00 00 00 mov $0x0,%eax
8048d9c: 39 d1 cmp %edx,%ecx
8048d9e: 7d 17 jge 8048db7 <func4+0x5b>
8048da0: 89 5c 24 08 mov %ebx,0x8(%esp)
8048da4: 83 c1 01 add $0x1,%ecx
8048da7: 89 4c 24 04 mov %ecx,0x4(%esp)
8048dab: 89 14 24 mov %edx,(%esp)
8048dae: e8 a9 ff ff ff call 8048d5c <func4>
8048db3: 8d 44 00 01 lea 0x1(%eax,%eax,1),%eax
8048db7: 83 c4 14 add $0x14,%esp
8048dba: 5b pop %ebx
8048d5e: 83 ec 14 sub $0x14,%esp ;allocate stack
8048d61: 8b 54 24 20 mov 0x20(%esp),%edx ;edx=x
8048d65: 8b 44 24 24 mov 0x24(%esp),%eax ;eax=y
8048d69: 8b 5c 24 28 mov 0x28(%esp),%ebx ;ebx=z
8048d6d: 89 d9 mov %ebx,%ecx ;ecx=z
8048d6f: 29 c1 sub %eax,%ecx ;ecx=z-y
8048d71: 89 ce mov %ecx,%esi ;esi=z-y
8048d73: c1 ee 1f shr $0x1f,%esi ;esi is sign bit of z-y, biased bit
8048d76: 01 f1 add %esi,%ecx ;ecx=z-y+sign(z-y)
8048d78: d1 f9 sar %ecx ;ecx=(z-y)/2
8048d7a: 01 c1 add %eax,%ecx ;ecx=y+(z-y)/2=(y+z)/2?
8048d7c: 39 d1 cmp %edx,%ecx ;(z+y)/2<=x?
8048d7e: 7e 17 jle 8048d97 <func4+0x3b> ;if so, goto 0x8048d97
8048d80: 83 e9 01 sub $0x1,%ecx ;ecx--
8048d83: 89 4c 24 08 mov %ecx,0x8(%esp) ;z(func4)=ecx
8048d87: 89 44 24 04 mov %eax,0x4(%esp) ;y(func4)=eax
8048d8b: 89 14 24 mov %edx,(%esp) ;x(func4)=edx=x
8048d8e: e8 c9 ff ff ff call 8048d5c <func4> ;recursive call
8048d93: 01 c0 add %eax,%eax ;eax=eax+eax (return value)
8048d95: eb 20 jmp 8048db7 <func4+0x5b> ;return eax
8048d97: b8 00 00 00 00 mov $0x0,%eax ;eax=0
8048d9c: 39 d1 cmp %edx,%ecx ;ecx<=x?
8048d9e: 7d 17 jge 8048db7 <func4+0x5b> ;if so, return 0
8048da0: 89 5c 24 08 mov %ebx,0x8(%esp) ;z(func4)=ebx
8048da4: 83 c1 01 add $0x1,%ecx ;ecx++
8048da7: 89 4c 24 04 mov %ecx,0x4(%esp) ;y(func4)=ecx
8048dab: 89 14 24 mov %edx,(%esp) ;x(func4)=edx=x
8048dae: e8 a9 ff ff ff call 8048d5c <func4> ;recursive call
8048db3: 8d 44 00 01 lea 0x1(%eax,%eax,1),%eax ;eax=2*eax+1, return value
8048db7: 83 c4 14 add $0x14,%esp ;restore stack pointer
8048dba: 5b pop %ebx ;restore registers
8048dbb: 5e pop %esi
8048dbc: c3 ret
@ -608,42 +608,44 @@ Disassembly of section .text:
8048eb1: 56 push %esi
8048eb2: 53 push %ebx
8048eb3: 83 ec 44 sub $0x44,%esp
8048eb6: 8d 44 24 10 lea 0x10(%esp),%eax
8048eb6: 8d 44 24 10 lea 0x10(%esp),%eax ;read 6 numbers to esp+0x10, set as a
8048eba: 89 44 24 04 mov %eax,0x4(%esp)
8048ebe: 8b 44 24 50 mov 0x50(%esp),%eax
8048ec2: 89 04 24 mov %eax,(%esp)
8048ec5: e8 52 03 00 00 call 804921c <read_six_numbers>
8048eca: be 00 00 00 00 mov $0x0,%esi
8048ecf: 8b 44 b4 10 mov 0x10(%esp,%esi,4),%eax
8048ed3: 83 e8 01 sub $0x1,%eax
8048ed6: 83 f8 05 cmp $0x5,%eax
8048ed9: 76 05 jbe 8048ee0 <phase_6+0x2f>
8048eca: be 00 00 00 00 mov $0x0,%esi ;set esi as i, i=0
8048ecf: 8b 44 b4 10 mov 0x10(%esp,%esi,4),%eax ;eax = a[i]
8048ed3: 83 e8 01 sub $0x1,%eax ;eax = a[i] - 1
8048ed6: 83 f8 05 cmp $0x5,%eax ;compare eax with 5
8048ed9: 76 05 jbe 8048ee0 <phase_6+0x2f> ;if a[i] < =5, dont explode
8048edb: e8 15 03 00 00 call 80491f5 <explode_bomb>
8048ee0: 83 c6 01 add $0x1,%esi
8048ee3: 83 fe 06 cmp $0x6,%esi
8048ee0: 83 c6 01 add $0x1,%esi ;i++
8048ee3: 83 fe 06 cmp $0x6,%esi ;if i < 6, jump to 8048eef
8048ee6: 75 07 jne 8048eef <phase_6+0x3e>
8048ee8: bb 00 00 00 00 mov $0x0,%ebx
8048ee8: bb 00 00 00 00 mov $0x0,%ebx ;ebx=k=0
8048eed: eb 38 jmp 8048f27 <phase_6+0x76>
8048eef: 89 f3 mov %esi,%ebx
8048ef1: 8b 44 9c 10 mov 0x10(%esp,%ebx,4),%eax
8048ef5: 39 44 b4 0c cmp %eax,0xc(%esp,%esi,4)
8048ef9: 75 05 jne 8048f00 <phase_6+0x4f>
8048eef: 89 f3 mov %esi,%ebx ;ebx=j=i
8048ef1: 8b 44 9c 10 mov 0x10(%esp,%ebx,4),%eax ;eax = a[j]
8048ef5: 39 44 b4 0c cmp %eax,0xc(%esp,%esi,4) ;compare a[i-1] and a[j]
8048ef9: 75 05 jne 8048f00 <phase_6+0x4f> ;if a[i-1] == a[j], explode
8048efb: e8 f5 02 00 00 call 80491f5 <explode_bomb>
8048f00: 83 c3 01 add $0x1,%ebx
8048f03: 83 fb 05 cmp $0x5,%ebx
8048f00: 83 c3 01 add $0x1,%ebx ;j++
8048f03: 83 fb 05 cmp $0x5,%ebx ;if j<=5, jump to 8048ef1
8048f06: 7e e9 jle 8048ef1 <phase_6+0x40>
8048f08: eb c5 jmp 8048ecf <phase_6+0x1e>
8048f08: eb c5 jmp 8048ecf <phase_6+0x1e> ;jump to next i of outer loop
8048f0a: 8b 52 08 mov 0x8(%edx),%edx
8048f0d: 83 c0 01 add $0x1,%eax
8048f10: 39 c8 cmp %ecx,%eax
8048f12: 75 f6 jne 8048f0a <phase_6+0x59>
8048f14: eb 05 jmp 8048f1b <phase_6+0x6a>
8048f16: ba 3c c1 04 08 mov $0x804c13c,%edx
8048f1b: 89 54 b4 28 mov %edx,0x28(%esp,%esi,4)
8048f1f: 83 c3 01 add $0x1,%ebx
8048f22: 83 fb 06 cmp $0x6,%ebx
8048f25: 74 17 je 8048f3e <phase_6+0x8d>
8048f27: 89 de mov %ebx,%esi
8048f27: 89 de mov %ebx,%esi ;esi=k
8048f29: 8b 4c 9c 10 mov 0x10(%esp,%ebx,4),%ecx
8048f2d: 83 f9 01 cmp $0x1,%ecx
8048f30: 7e e4 jle 8048f16 <phase_6+0x65>

17
LAB3-bomblab/func4.c Normal file
View File

@ -0,0 +1,17 @@
int func4(int x, int y, int z)
{
int a = (y + z) / 2, ret;
if (a > x)
{
a--;
ret = func4(x, y, a);
return 2 * ret;
}
if (a <= x)
{
return 0;
}
a++;
ret = func4(x, a, z);
return ret * 2 + 1;
}

View File

@ -0,0 +1,5 @@
You can Russia from land here in Alaska.
0 1 1 2 3 5
0 h 395
0 0
-&#$('