Wie berechnet man die Differenz zwischen zwei Hex-Offsets?

1284
user3358218

Ich habe nach dem Weg gesucht, aber ich habe keinen Weg gefunden, es zu tun. Es gibt eine andere Möglichkeit, diese Differenz zu berechnen, anstatt nacheinander zu zählen.

Zum Beispiel:

0x7fffffffe070 - 0x7fffffffe066 = 0x04 0x7fffffffe066 - 0x7fffffffe070 = -0x04  0x7fffffffdbe0 - 0x7fffffffda98 = ???? 

Um diese Ergebnisse zu verstehen, nehmen wir an, dass wir eine Datei mit einem Hex-Editor öffnen und die folgenden Hex-Zahlen haben: 8A B7 00 00 FF mit ihren entsprechenden Hex-Offsets: 0x7fffffffe066 0x7fffffffe067 0x7fffffffe068 0x7fffffffe070. Die Differenz der Hex-Offsets der Zahlen 8A und FF beträgt 0x04, da sie sich in 4 Positionen unterscheiden.

1

2 Antworten auf die Frage

4
grawity

screenshot of a comment

Die "Hex-Offsets" sind nur gewöhnliche Zahlen und haben keine besonderen Regeln für die Subtraktion. Sie erhalten nur unterschiedliche Ergebnisse, weil Ihre Eingabe falsch ist:

Wir haben die folgenden Hex-Zahlen: 8A B7 00 00 FF mit ihren entsprechenden Hex-Offsets: 0x7fffffffe066 0x7fffffffe067 0x7fffffffe068 0x7fffffffe069 0x7fffffffe070. Die Differenz der Hex-Offsets der Zahlen 8A und FF beträgt 0x04, da sie sich in 4 Positionen unterscheiden.

In Hexadezimalzeichen wird 0x9 zuerst gefolgt von 0xA, 0xB, 0xC, 0xD, 0xE, 0xF und nur dann von 0x10. Wenn Sie also 5 aufeinander folgende Bytes haben und das vierte bei 0x7FFF'FFFF'E069 ist, wird das folgende Byte bei 0x7FFF'FFFF ' E06A sein, nicht bei 0x7FFF'FFFF'E070.

Mit anderen Worten, 0x…E070 - 0x…E066 = 0xAist eigentlich das richtige Ergebnis.

+1; Ich brauchte eine Minute, um zu realisieren, was eigentlich gefragt wurde. Ramhound vor 7 Jahren 0
1
E. van Putten

Ich bin nicht sicher, aber vielleicht stellt sich die Frage, wie man den Unterschied von Hand berechnet.

Sie können die Differenz von AB berechnen, indem Sie sie in Zusätze umschreiben. Sie würden dies tun, indem Sie zuerst alle Bits von B umdrehen / invertieren und dann diesen Wert zu A hinzufügen. Als Nächstes erhöhen Sie das Ergebnis um 1 und trimmen (schmälern) das Ergebnis auf genauso viele Stellen (oder Bits) wie die ursprünglichen Operanden wurden.

Demo mit hexadezimalen Werten aus seiner Frage:

Lassen Sie uns 0x7fffffffe070 berechnen - 0x7fffffffe066:

 7fffffffe070  800000001f99 + (this is 0x7fffffffe066 with all bits inverted) =============== 1000000000009 1 + =============== A (or 10 decimal, or +0xa if you will) 

Und nun berechnen wir 0x7fffffffe066 - 0x7fffffffe070:

7fffffffe066 800000001f8f + (this is 0x7fffffffe070 with all bits inverted) ============== fffffffffff5 1 + ============== fffffffffff6 (or -10 decimal / -0xa) 

Es ist einfach, alle Bits in einer Hex-Ziffer umzudrehen, wenn Sie Folgendes wissen:

0 = F (or 0000 ==> 1111) 1 = E (or 0001 ==> 1110) 2 = D  ... F = 0 (or 1111 ==> 0000) 

Und so weiter...