|
15 | 15 | ) |
16 | 16 |
|
17 | 17 | from arch import get_arch |
18 | | -from arch.base_arch import BaseArch |
| 18 | +from arch.base_arch import BaseArch, FlagRegister |
19 | 19 | from common.constants import GLYPHS, TERM_COLOURS |
20 | 20 | from common.util import ( |
21 | 21 | attempt_to_read_string_from_memory, |
@@ -155,25 +155,22 @@ def print_register(self, register: SBValue) -> None: |
155 | 155 |
|
156 | 156 | print(line) |
157 | 157 |
|
158 | | - def print_flags_register(self, flag_register: SBValue) -> None: |
| 158 | + def print_flags_register(self, flag_register: FlagRegister) -> None: |
159 | 159 | """Format and print the contents of the flag register.""" |
| 160 | + flag_value = self.frame.register[flag_register.name].GetValueAsUnsigned() |
160 | 161 |
|
161 | | - if ( |
162 | | - self.old_registers.get(self.arch().flag_register) |
163 | | - == flag_register.GetValueAsUnsigned() |
164 | | - ): |
| 162 | + if self.old_registers.get(flag_register.name) == flag_value: |
165 | 163 | # No change |
166 | 164 | highlight = TERM_COLOURS.BLUE |
167 | 165 | else: |
168 | 166 | # Change and highlight |
169 | 167 | highlight = TERM_COLOURS.RED |
170 | 168 |
|
171 | | - flag_value = flag_register.GetValueAsUnsigned() |
172 | | - line = f"{highlight.value}{flag_register.GetName().ljust(7)}{TERM_COLOURS.ENDC.value}: [" |
| 169 | + line = f"{highlight.value}{flag_register.name.ljust(7)}{TERM_COLOURS.ENDC.value}: [" |
173 | 170 | line += " ".join( |
174 | 171 | [ |
175 | 172 | name.upper() if flag_value & bitmask else name |
176 | | - for name, bitmask in self.arch().flag_register_bit_masks.items() |
| 173 | + for name, bitmask in flag_register.bit_masks.items() |
177 | 174 | ] |
178 | 175 | ) |
179 | 176 | line += "]" |
@@ -204,7 +201,9 @@ def display_registers(self) -> None: |
204 | 201 | for reg in get_registers(self.frame, self.arch().gpr_key): |
205 | 202 | if reg.GetName() in self.arch().gpr_registers: |
206 | 203 | self.print_register(reg) |
207 | | - self.print_flags_register(self.frame.register[self.arch.flag_register]) |
| 204 | + for flag_register in self.arch.flag_registers: |
| 205 | + if self.frame.register[flag_register.name] is not None: |
| 206 | + self.print_flags_register(flag_register) |
208 | 207 |
|
209 | 208 | def display_stack(self) -> None: |
210 | 209 | """Print information about the contents of the top of the stack""" |
|
0 commit comments