set $eflags
mà không ngoặc làm việc trong GDB 7.7.1
Để thiết lập một lá cờ cá nhân, sử dụng chỉ số của nó. Ví dụ, ZF là bit thứ 6, vì vậy chúng tôi có thể thiết lập nó với:
set $ZF = 6
set $eflags |= (1 << $ZF)
Cũng vậy với tất cả các hoạt động Bitwise khác: How do you set, clear, and toggle a single bit?
# Clear
set $eflags &= ~(1 << $ZF)
# Toggle
set $eflags ^= (1 << $ZF)
gì gây nhầm lẫn là nhiều bit được hoặc dành riêng, không thể sửa đổi trực tiếp bằng bất kỳ lệnh nào hoặc không thể sửa đổi từ chế độ người dùng, xem thêm: Flags registers - Can we read or write them directly? và do đó GDB không chạm vào chúng.
Ví dụ:
(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
trong hệ nhị phân là:
0010 0000 0010
0x54fd7
trong hệ nhị phân là:
0101 0100 1111 1101 0111
TODO hiểu tại sao mỗi người trong số những bit được thiết lập hay không, bằng cách xem hướng dẫn sử dụng http://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-vol-1-manual.pdf và GDB s mã ource.
Ones rằng tôi hiểu:
- tất cả các thanh ghi reserved bị bỏ tại giá trị cố định của họ: 1 cho bit 1 và 0 cho bit 3, 5, 15 và 22-31
Nguồn
2015-07-10 11:15:23
eflags [ZF] nên làm .. –
Tôi nhận được "Undefined command:" eflags ". Try" help "." với "eflags [ZF]". Bạn có thể đưa ra một ví dụ về lệnh này? – snakeninny