Binären Bombe phase 3 stecken
Ich bin ehrlich gesagt, sehr verwirrt, durch meine Bombe phase 3 nicht auf der Suche, wie alle meine Klassenkameraden oder das Beispiel von meinem professor. Jegliche Hilfe würde sehr geschätzt werden. Ich habe eine Kopie von meinem letzten terminal für den Einsatz und krank-setzen Sie die
Ich habe versucht, meine hand auf diese für den besseren Teil der 5 Stunden, die ich bekommen habe, weit genug, um zu wissen, dass %d %d ist das layout angefordert werden, und, dass seine Fragen für 2 Nummern mit ich glaube einer von Ihnen negativ. Aufgrund der Vergleich-Anweisung und die jg hier
0x08048fbb <+39>: cmp $0x1,%eax
0x08048fbe <+42>: jg 0x8048fc5 <phase_3+49>
Auch, dass seine Berufung für einen weiteren Vergleich mit dem gleichen Wert, die ich denke, ist der erste hier
0x08048fc5 <+49>: cmpl $0x7,-0xc(%ebp)
0x08048fc9 <+53>: ja 0x8049032 <phase_3+158>
Was wirft mich aus-ist das add-und subtrahieren Sie rechts von der Fledermaus und im Allgemeinen alle addieren und subtrahieren von, dass ist voll in den Boden.
Wo würde ich finden, die Werte, die tatsächlich mit diesen Aussagen auf den endor-soll ich einfach die zahlen, die ich sehe. An dieser Stelle möchte ich nicht einmal wissen, ob seine und starrte mir ins Gesicht. Alle Vergleiche sind wie folgt
0x08048fbb <+39>: cmp $0x1,%eax
0x08048fbe <+42>: jg 0x8048fc5
0x08048fc5 <+49>: cmpl $0x7,-0xc(%ebp)
0x08048fc9 <+53>: ja 0x8049032 <phase_3+158>
0x0804903c <+168>: cmpl $0x5,-0xc(%ebp)
0x08049040 <+172>: jg 0x8049047 <phase_3+179>
Aber die Matsche im moment Brauch ich einen neuen Satz von Augen auf dieses problem. Wenn Ihr da draußen jede Hilfe wäre sehr geschätzt werden.
That's number 2. Keep going!
0 1
Breakpoint 1, 0x08048f9a in phase_3 ()
(gdb) disas
Dump of assembler code for function phase_3:
0x08048f94 <+0>: push %ebp
0x08048f95 <+1>: mov %esp,%ebp
0x08048f97 <+3>: sub $0x28,%esp
=> 0x08048f9a <+6>: lea -0x10(%ebp),%eax
0x08048f9d <+9>: mov %eax,0xc(%esp)
0x08048fa1 <+13>: lea -0xc(%ebp),%eax
0x08048fa4 <+16>: mov %eax,0x8(%esp)
0x08048fa8 <+20>: movl $0x804a58c,0x4(%esp)
0x08048fb0 <+28>: mov 0x8(%ebp),%eax
0x08048fb3 <+31>: mov %eax,(%esp)
0x08048fb6 <+34>: call 0x8048894 <__isoc99_sscanf@plt>
0x08048fbb <+39>: cmp $0x1,%eax
0x08048fbe <+42>: jg 0x8048fc5 <phase_3+49>
0x08048fc0 <+44>: call 0x8049321 <explode_bomb>
0x08048fc5 <+49>: cmpl $0x7,-0xc(%ebp)
0x08048fc9 <+53>: ja 0x8049032 <phase_3+158>
0x08048fcb <+55>: mov -0xc(%ebp),%eax
0x08048fce <+58>: xchg %ax,%ax
0x08048fd0 <+60>: jmp *0x804a4c0(,%eax,4)
0x08048fd7 <+67>: mov $0x0,%eax
0x08048fdc <+72>: lea 0x0(%esi,%eiz,1),%esi
0x08048fe0 <+76>: jmp 0x804902d <phase_3+153>
0x08048fe2 <+78>: mov $0x0,%eax
0x08048fe7 <+83>: jmp 0x804902a <phase_3+150>
0x08048fe9 <+85>: mov $0x0,%eax
0x08048fee <+90>: xchg %ax,%ax
0x08048ff0 <+92>: jmp 0x8049027 <phase_3+147>
0x08048ff2 <+94>: mov $0x0,%eax
0x08048ff7 <+99>: jmp 0x8049024 <phase_3+144>
0x08048ff9 <+101>: mov $0x0,%eax
0x08048ffe <+106>: xchg %ax,%ax
0x08049000 <+108>: jmp 0x8049021 <phase_3+141>
0x08049002 <+110>: mov $0x0,%eax
0x08049007 <+115>: jmp 0x804901c <phase_3+136>
0x08049009 <+117>: mov $0x30d,%eax
0x0804900e <+122>: xchg %ax,%ax
0x08049010 <+124>: jmp 0x8049017 <phase_3+131>
0x08049012 <+126>: mov $0x0,%eax
0x08049017 <+131>: sub $0x264,%eax
0x0804901c <+136>: add $0x3b8,%eax
0x08049021 <+141>: sub $0x49,%eax
0x08049024 <+144>: add $0x49,%eax
0x08049027 <+147>: sub $0x49,%eax
0x0804902a <+150>: add $0x49,%eax
0x0804902d <+153>: sub $0x49,%eax
0x08049030 <+156>: jmp 0x804903c <phase_3+168>
0x08049032 <+158>: call 0x8049321 <explode_bomb>
0x08049037 <+163>: mov $0x0,%eax
0x0804903c <+168>: cmpl $0x5,-0xc(%ebp)
0x08049040 <+172>: jg 0x8049047 <phase_3+179>
0x08049042 <+174>: cmp -0x10(%ebp),%eax
0x08049045 <+177>: je 0x804904c <phase_3+184>
0x08049047 <+179>: call 0x8049321 <explode_bomb>
0x0804904c <+184>: leave
0x0804904d <+185>: lea 0x0(%esi),%esi
0x08049050 <+188>: ret
End of assembler dump.
(gdb)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der erste Vergleich, den Sie erwähnt haben (die man bei
+39
) ist der Vergleich%eax
enthält den Rückgabewert vonsscanf
. Als solcher ist es einfach nur testen, wie viele Argumente umgewandelt werden konnte. Dieser code erfordert2
so, dass der code tutif (sscanf() > 1) goto ok; explode_bomb();
Vergleich zu
+49
ist die überprüfung der ersten Reihe, es tutif ((unsigned)x > 7) explode_bomb();
ich hoffe, das ist klar.Nächsten, an
+60
haben Sie die wichtigste Anweisung in diesem Stück code:jmp *0x804a4c0(,%eax,4)
. Das ist ein Sprung, durch eine jump-Tabelle. Es wird Sie an verschiedenen Orten je nach dem Wert in%eax
, die an diesem Punkt hält Ihre erste Eingabe. Wir wissen, der Eingang ist zwischen0
und7
so haben Sie 8 Einträge in dieser Tabelle. Sie sollten in der Lage sein, um Sie zu untersuchen mitx/8a 0x804a4c0
. Es ist eine faire Vermutung, dass Sie verschiedene Adressen, die in den folgenden code-block und die Strömung wieder an+163
. Dieses Muster wird üblicherweise von Compiler zu implementieren, der eineswitch
- Anweisung.Linie
+168
weiter einschränkt die erste Zahl zwischen0
und5
" und " Linie+174
vergleicht die zweite Zahl den aktuellen Wert des%eax
und explodiert die Bombe auf mismatch. Das sagt uns, dass der gültige Eingabe-Formular 6 Paare. Wir können wählen Sie eine beliebige erste Zahl, Folgen Sie durch die Tabelle springen und sehen, was Wert gelegt werden, in%eax
- und-Eingang, der als zweite Zahl.