set $eflags
bez nawiasu działa w GDB 7.7.1
Aby ustawić indywidualny flagę, użyj swojego indeksu. Np ZF jest 6 bitów, dzięki czemu możemy ustawić go z:
set $ZF = 6
set $eflags |= (1 << $ZF)
To samo dotyczy wszystkich innych operacji bitowe: How do you set, clear, and toggle a single bit?
# Clear
set $eflags &= ~(1 << $ZF)
# Toggle
set $eflags ^= (1 << $ZF)
Co powoduje zamieszanie jest, że wiele bitów albo są zastrzeżone, nie może być modyfikowany bezpośrednio przez żadną instrukcję lub nie może być modyfikowany z trybu użytkownika, zobacz także: Flags registers - Can we read or write them directly?, a więc GDB ich nie dotyka.
Na przykład:
(gdb) set $eflags = 0
(gdb) i r eflags
eflags 0x202 [ IF ]
(gdb) set $eflags = 0xFFFFFFFF
(gdb) i r eflags
eflags 0x54fd7 [ CF PF AF ZF SF TF IF DF OF NT RF AC ]
0x202
binarnie jest:
0010 0000 0010
0x54fd7
binarnie jest:
0101 0100 1111 1101 0111
TODO zrozumieć, dlaczego każdy z tych bitów były ustawione czy nie, patrząc na instrukcję http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-vol-1-manual.pdf i GDB s kod źródłowy.
Te, że rozumie:
- wszystkie zastrzeżone rejestry pozostawiono na wartości stałej: 1 dla bitu 1, i od 0 do 3 bitów, 5, 15 i 22-31
eflags [ZF] powinien zrobić .. –
Mam "Niezdefiniowane polecenie:" eflags. "Spróbuj" pomóż "." z "eflags [ZF]". Czy możesz podać przykład tego polecenia? – snakeninny