פורסם 2010 בדצמבר 2914 שנים קיבלנו תרגיל בקורס במבנה מחשב לנטרל פצצה בינארית. כלומר אנחנו מקבלים קובץ הרצה, עושים לו 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 אפשרויות.מישהו יודע את התשובה ויכול לעזור לי להבין מה קורה פה?
פורסם 2011 בינואר 214 שנים אי אפשר לענות לך בלי לראות את כל הקודאתה צריך להגיע ל6 מספרים שלא יגרמו להפעלה של הפונקציה ?אתה צריך לשנות את התוכנית כדאי לא להגיע לפונקציה ?למה אתה מתכוון שאתה רושם "סידור 1-6" ?בדרך כלל כדאי לך להתמקד בפונקציה שמבצעת את החישוב על ה6 מספריםלראות מה היא בדיוק עושה עבור כל מיני קלטים וכו...
פורסם 2011 בינואר 214 שנים קודם, לפי הקפיצות שיש בקוד, תנסה להבין מה הסדר של הבדיקות.אחרי שהבנת מה הסדר של הבדיקות, תנסה להבין מה הבדיקות עצמן עושות, ואיך להתחמק מהקריאות לפונקציות.אני ממליץ לך לצייר עץ ובו הכתובות של הפקודות שרצות, לפי סדר הבדיקות.
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.