2016-05-09 7 views
1

Ich versuche gdb zu verwenden, um etwas Mathe zu tun. Schauen Sie sich diese zwei ConversionsGDB druckt die Ausgabe nicht in vorzeichenbehafteten Dezimalzahlen

gdb$ p/x -8 
$8 = 0xfffffff8 
gdb$ p/d 0xfffffff8 
$9 = 4294967288 

Warum im zweiten Fall gdb nicht zurück -8 anstelle des unsigned Wert der Zahl? der Tat gibt es keinen Unterschied überhaupt zwischen p/d und p/u

gdb$ p/u 0xfffffff8 
$10 = 4294967288 

Antwort

2

ich nicht in der Dokumentation für diese finden, aber es sieht, dass in GDB für ganzzahlige Werte Standardtyp 64-Bit-Ganzzahl mit Vorzeichen ist. Siehe dazu:

(GDB) p/d 0xfffffffffffffff8
$ 7 = -8

So interpretiert es 0xfffffff8 als (int64_t) 0x00000000fffffff8, die einen positiven Wert.

Sie suchen diese:

(GDB) p/d (int) 0xfffffff8
9 $ = -8
(GDB) p/u (int) 0xfffffff8
10 $ = 4294967288

+0

Danke für die Hilfe, es scheint jetzt ziemlich offensichtlich. Ich habe auch eine Alternative zu Ihrer Lösung gefunden: 'p/d -0xfffffff8', die '$ 5 = 8' zurückgibt. Es kann schneller sein (d. H. Keine Umschalttaste erforderlich) und Sie müssen nur daran denken, das Vorzeichen Ihres Ergebnisses erneut zu ändern. – tigerjack89

Verwandte Themen