(self, argv: List[str])
| 5882 | f"\n{_cmdline_} +zero # sets ZERO flag") |
| 5883 | |
| 5884 | def do_invoke(self, argv: List[str]) -> None: |
| 5885 | if not gef.arch.flag_register: |
| 5886 | warn(f"The architecture {gef.arch.arch}:{gef.arch.mode} doesn't have flag register.") |
| 5887 | return |
| 5888 | |
| 5889 | for flag in argv: |
| 5890 | if len(flag) < 2: |
| 5891 | continue |
| 5892 | |
| 5893 | action = flag[0] |
| 5894 | name = flag[1:].lower() |
| 5895 | |
| 5896 | if action not in ("+", "-", "~"): |
| 5897 | err(f"Invalid action for flag '{flag}'") |
| 5898 | continue |
| 5899 | |
| 5900 | if name not in gef.arch.flags_table.values(): |
| 5901 | err(f"Invalid flag name '{flag[1:]}'") |
| 5902 | continue |
| 5903 | |
| 5904 | for off in gef.arch.flags_table: |
| 5905 | if gef.arch.flags_table[off] == name: |
| 5906 | old_flag = gef.arch.register(gef.arch.flag_register) |
| 5907 | if action == "+": |
| 5908 | new_flags = old_flag | (1 << off) |
| 5909 | elif action == "-": |
| 5910 | new_flags = old_flag & ~(1 << off) |
| 5911 | else: |
| 5912 | new_flags = old_flag ^ (1 << off) |
| 5913 | |
| 5914 | gdb.execute(f"set ({gef.arch.flag_register}) = {new_flags:#x}") |
| 5915 | |
| 5916 | gef_print(gef.arch.flag_register_to_human()) |
| 5917 | return |
| 5918 | |
| 5919 | |
| 5920 | @register |
nothing calls this directly
no test coverage detected