2016-06-20 27 views
1

Wenn ich einen Code auf Fehler und gefunden:Warum in die nicht verfügbar Adresse springen (GDB)

0x08048500 <+0>: push %ebp 
0x08048501 <+1>: mov %esp,%ebp 
... 
0x08048563 <+99>: jmp 0x8048567 <Postion+103> <===0x8048567 doesn't exist an instruction. 
0x08048565 <+101>: dec %edx 
0x08048566 <+102>: cmp %bh,%al 
0x08048568 <+104>: test %edx,%esp 

F: Warum funktioniert "jmp 0x8048567" Sprung in < +103>? Es existiert keine Instruktion. Was ist der Punkt? Vielen Dank.

Antwort

1

Warum springt "jmp 0x8048567" in < +103>? Es existiert keine Anweisung

Es ist sehr wahrscheinlich, dass die Anweisung unter 0x8048567 existiert. Sie können es mit x/4i 0x8048567 sehen.

Was wahrscheinlich passiert ist, dass der Befehl bei 0x8048565 nicht wirklich existiert, aber GDB weiß das nicht, disassembliert weiterhin eine Anweisung nach der anderen und wird nicht mehr mit dem realen Befehlsstrom synchronisiert.

+0

Wie kann ich die echte Anweisung bei 0x8048565 bekommen? –

+0

Es gibt keine * echte Anweisung an '0x8048565', es gibt nur Bytes, die Sie als Dezimal, Hexadezimal oder Gleitkomma oder als Anweisung interpretieren können. Wenn Sie Bytes in '0x8048565' als Anweisungen interpretieren, erhalten Sie' dec% edx', die GDB Ihnen bereits gezeigt hat. –