ניטרול פצצה בינארית - תכנות - HWzone פורומים
עבור לתוכן
  • צור חשבון

ניטרול פצצה בינארית


Aviv C

Recommended Posts

קיבלנו תרגיל בקורס במבנה מחשב לנטרל פצצה בינארית. כלומר אנחנו מקבלים קובץ הרצה, עושים לו objdump ומסתכלים על הקוד אסמבלי שמתקבל במטרה לעבור את כל השלבים בלי שתיקרא הפונקציה explode_bomb.

הדרך שמשתמשים בה היא debugging בעזרת gdb.

עברתי 5 מתוך 6 שלבים ונתקעתי פה:

08048bf7 <phase_6>:
8048bf7: 55 push %ebp
8048bf8: 89 e5 mov %esp,%ebp
8048bfa: 57 push %edi
8048bfb: 56 push %esi
8048bfc: 53 push %ebx
8048bfd: 83 ec 3c sub $0x3c,%esp
8048c00: 8d 45 dc lea 0xffffffdc(%ebp),%eax
8048c03: 89 44 24 04 mov %eax,0x4(%esp)
8048c07: 8b 45 08 mov 0x8(%ebp),%eax
8048c0a: 89 04 24 mov %eax,(%esp)
8048c0d: e8 53 06 00 00 call 8049265 <read_six_numbers>
8048c12: bb 00 00 00 00 mov $0x0,%ebx
8048c17: 8b 44 9d dc mov 0xffffffdc(%ebp,%ebx,4),%eax
8048c1b: 83 e8 01 sub $0x1,%eax
8048c1e: 83 f8 05 cmp $0x5,%eax
8048c21: 76 05 jbe 8048c28 <phase_6+0x31>
8048c23: e8 fb 05 00 00 call 8049223 <explode_bomb>
8048c28: 8d 7b 01 lea 0x1(%ebx),%edi
8048c2b: 83 ff 06 cmp $0x6,%edi
8048c2e: 0f 84 9a 00 00 00 je 8048cce <phase_6+0xd7>
8048c34: 8d 74 9d dc lea 0xffffffdc(%ebp,%ebx,4),%esi
8048c38: 89 fb mov %edi,%ebx
8048c3a: 8d 45 dc lea 0xffffffdc(%ebp),%eax
8048c3d: 89 45 c0 mov %eax,0xffffffc0(%ebp)
8048c40: 8b 55 c0 mov 0xffffffc0(%ebp),%edx
8048c43: 8b 44 ba fc mov 0xfffffffc(%edx,%edi,4),%eax
8048c47: 3b 46 04 cmp 0x4(%esi),%eax
8048c4a: 75 05 jne 8048c51 <phase_6+0x5a>
8048c4c: e8 d2 05 00 00 call 8049223 <explode_bomb>
8048c51: 83 c3 01 add $0x1,%ebx
8048c54: 83 c6 04 add $0x4,%esi
8048c57: 83 fb 05 cmp $0x5,%ebx
8048c5a: 7e e4 jle 8048c40 <phase_6+0x49>
8048c5c: 89 fb mov %edi,%ebx
8048c5e: eb b7 jmp 8048c17 <phase_6+0x20>
8048c60: 8b 49 08 mov 0x8(%ecx),%ecx
8048c63: 83 c0 01 add $0x1,%eax
8048c66: 3b 44 95 dc cmp 0xffffffdc(%ebp,%edx,4),%eax
8048c6a: 7c f4 jl 8048c60 <phase_6+0x69>
8048c6c: 89 4c 95 c4 mov %ecx,0xffffffc4(%ebp,%edx,4)
8048c70: 83 c2 01 add $0x1,%edx
8048c73: 83 fa 05 cmp $0x5,%edx
8048c76: 7f 0c jg 8048c84 <phase_6+0x8d>
8048c78: b9 fc a5 04 08 mov $0x804a5fc,%ecx
8048c7d: b8 01 00 00 00 mov $0x1,%eax
8048c82: eb e2 jmp 8048c66 <phase_6+0x6f>
8048c84: 8b 4d c4 mov 0xffffffc4(%ebp),%ecx
8048c87: 8b 45 c8 mov 0xffffffc8(%ebp),%eax
8048c8a: 89 41 08 mov %eax,0x8(%ecx)
8048c8d: 8b 55 cc mov 0xffffffcc(%ebp),%edx
8048c90: 89 50 08 mov %edx,0x8(%eax)
8048c93: 8b 45 d0 mov 0xffffffd0(%ebp),%eax
8048c96: 89 42 08 mov %eax,0x8(%edx)
8048c99: 8b 55 d4 mov 0xffffffd4(%ebp),%edx
8048c9c: 89 50 08 mov %edx,0x8(%eax)
8048c9f: 8b 45 d8 mov 0xffffffd8(%ebp),%eax
8048ca2: 89 42 08 mov %eax,0x8(%edx)
8048ca5: c7 40 08 00 00 00 00 movl $0x0,0x8(%eax)
8048cac: 89 cb mov %ecx,%ebx
8048cae: be 00 00 00 00 mov $0x0,%esi
8048cb3: 8b 53 08 mov 0x8(%ebx),%edx
8048cb6: 8b 03 mov (%ebx),%eax
8048cb8: 3b 02 cmp (%edx),%eax
8048cba: 7d 05 jge 8048cc1 <phase_6+0xca>
8048cbc: e8 62 05 00 00 call 8049223 <explode_bomb>
8048cc1: 8b 5b 08 mov 0x8(%ebx),%ebx
8048cc4: 83 c6 01 add $0x1,%esi
8048cc7: 83 fe 05 cmp $0x5,%esi
8048cca: 74 13 je 8048cdf <phase_6+0xe8>
8048ccc: eb e5 jmp 8048cb3 <phase_6+0xbc>
8048cce: b9 fc a5 04 08 mov $0x804a5fc,%ecx
8048cd3: b8 01 00 00 00 mov $0x1,%eax
8048cd8: ba 00 00 00 00 mov $0x0,%edx
8048cdd: eb 87 jmp 8048c66 <phase_6+0x6f>
8048cdf: 83 c4 3c add $0x3c,%esp
8048ce2: 5b pop %ebx
8048ce3: 5e pop %esi
8048ce4: 5f pop %edi
8048ce5: 5d pop %ebp
8048ce6: c3 ret

חשבתי על זה כבר כמה זמן אבל אין לי מושג מה הולך פה.

עד כמה שהבנתי אני קולט 6 מספרים שכל אחד מהם בטווח 1-6 בלי חזרות (כלומר זה סידור של 1-6). אחר כך זה עושה איזשהו חישוב ובדיקות שלא הבנתי אותם.

אני עד כדי כך נואש עד שחשבתי לנסות את כל האפשרויות לסידור שזה 720 אפשרויות.

מישהו יודע את התשובה ויכול לעזור לי להבין מה קורה פה?

קישור לתוכן
שתף באתרים אחרים

אי אפשר לענות לך בלי לראות את כל הקוד

אתה צריך להגיע ל6 מספרים שלא יגרמו להפעלה של הפונקציה ?

אתה צריך לשנות את התוכנית כדאי לא להגיע לפונקציה ?

למה אתה מתכוון שאתה רושם "סידור 1-6" ?

בדרך כלל כדאי לך להתמקד בפונקציה שמבצעת את החישוב על ה6 מספרים

לראות מה היא בדיוק עושה עבור כל מיני קלטים וכו...

קישור לתוכן
שתף באתרים אחרים

קודם, לפי הקפיצות שיש בקוד, תנסה להבין מה הסדר של הבדיקות.

אחרי שהבנת מה הסדר של הבדיקות, תנסה להבין מה הבדיקות עצמן עושות, ואיך להתחמק מהקריאות לפונקציות.

אני ממליץ לך לצייר עץ ובו הכתובות של הפקודות שרצות, לפי סדר הבדיקות.

קישור לתוכן
שתף באתרים אחרים

  • 5 חודשים מאוחר יותר...

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

×
  • צור חדש...