(self, _: List[str], **kwargs: Any)
| 8040 | @only_if_gdb_running |
| 8041 | @parse_arguments({"location": "", "values": ["", ]}, {}) |
| 8042 | def do_invoke(self, _: List[str], **kwargs: Any) -> None: |
| 8043 | args : argparse.Namespace = kwargs["arguments"] |
| 8044 | if not self.format or self.format not in self.SUPPORTED_SIZES: |
| 8045 | self.usage() |
| 8046 | return |
| 8047 | |
| 8048 | if not args.location or not args.values: |
| 8049 | self.usage() |
| 8050 | return |
| 8051 | |
| 8052 | addr = align_address(parse_address(args.location)) |
| 8053 | size, fcode = self.SUPPORTED_SIZES[self.format] |
| 8054 | values = args.values |
| 8055 | |
| 8056 | if size == 1: |
| 8057 | if values[0].startswith("$_gef"): |
| 8058 | var_name = values[0] |
| 8059 | try: |
| 8060 | values = str(gdb.parse_and_eval(var_name)).lstrip("{").rstrip("}").replace(",","").split(" ") |
| 8061 | except: |
| 8062 | gef_print(f"Bad variable specified, check value with command: p {var_name}") |
| 8063 | return |
| 8064 | |
| 8065 | d = str(gef.arch.endianness) |
| 8066 | for value in values: |
| 8067 | value = parse_address(value) & ((1 << size * 8) - 1) |
| 8068 | vstr = struct.pack(d + fcode, value) |
| 8069 | gef.memory.write(addr, vstr, length=size) |
| 8070 | addr += size |
| 8071 | return |
| 8072 | |
| 8073 | |
| 8074 | @register |
nothing calls this directly
no test coverage detected