Einzelnen Beitrag anzeigen
Alt 05.06.09, 17:33   #10 (permalink)
+++ATH0
Member of Honour
 
Benutzerbild von +++ATH0
 
Registriert seit: 02.04.05
+++ATH0 Leistung: K 6-3+++ATH0 Leistung: K 6-3+++ATH0 Leistung: K 6-3
Likes: 76
Standard

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
+++ATH0 ist offline   Mit Zitat antworten
 

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61