Zitat:
Original von the_uxreal
Hallo +++ATH0,
trotz von deinem sehr ausführlichen Beitrag bleiben ein paar Fragen von meiner Seite offen.- In dem ersten Codebeispiel ist geschrieben, dass die JNZ-Anweisung 2 Bytes groß ist. Woher weiß man das bzw. wo gibt es einen Nachweis dafür?
- Zudem gibt es bei der JNZ-Anweisung ein Opcode, das 43 Bytes nach vorne springt. Ist es möglich sich das in einem Hex-Editor anzuschauen oder das irgendwie nachzuvollziehen?
the_uxreal
|
CDW hat es ja jetzt nochmal für das Intel-Manual gezeigt.
Aber was spricht denn dagegen, die gleiche vorgehensweise wie ich sie oben beschrieben habe, nochmal für 0x75 durchzugehen? (sozusagen als kleine Hausaufgabe *g*)
Hier in der Tabelle [1] finden wir für 0x75 dann:
JNZ Jb
Schauen wir hier [2] nach wozu das J und das b ist:
J steht für einen Offset, relativ vom EIP Register.
Und das kleine b steht für ein Byte.
Dem Opcode (0x75) folgt demnach ein 1 Byte großer relativer Offset (0x2B) vom EIP aus. Macht insgesamt für die Instruktion 2 Byte.
So kannst du eigentlich den Aufbau und die Größe jeder Instruktion genaustens nachvollziehen.
[1]
http://www.sandpile.org/ia32/opc_1.htm
[2]
http://www.sandpile.org/ia32/opc_enc.htm