MCPcopy Create free account
hub / github.com/HexHive/NASS / do_invoke

Method do_invoke

tools/gef.py:4649–4701  ·  view source on GitHub ↗

Default value for print-format command.

(self, _: List[str], **kwargs: Any)

Source from the content-addressed store, hash-verified

4647 @only_if_gdb_running
4648 @parse_arguments({"location": "$pc", }, {("--length", "-l"): 256, "--bitlen": 0, "--lang": "py", "--clip": True,})
4649 def do_invoke(self, _: List[str], **kwargs: Any) -> None:
4650 """Default value for print-format command."""
4651 args: argparse.Namespace = kwargs["arguments"]
4652 args.bitlen = args.bitlen or gef.arch.ptrsize * 2
4653
4654 valid_bitlens = self.format_matrix.keys()
4655 if args.bitlen not in valid_bitlens:
4656 err(f"Size of bit must be in: {valid_bitlens!s}")
4657 return
4658
4659 if args.lang not in self.valid_formats:
4660 err(f"Language must be in: {self.valid_formats!s}")
4661 return
4662
4663 start_addr = parse_address(args.location)
4664 size = int(args.bitlen / 8)
4665 end_addr = start_addr + args.length * size
4666 fmt = self.format_matrix[args.bitlen][0]
4667 data = []
4668
4669 if args.lang != "bytearray":
4670 for addr in range(start_addr, end_addr, size):
4671 value = struct.unpack(fmt, gef.memory.read(addr, size))[0]
4672 data += [value]
4673 sdata = ", ".join(map(hex, data))
4674
4675 if args.lang == "bytearray":
4676 data = gef.memory.read(start_addr, args.length)
4677 preview = str(data[0:self["max_size_preview"]])
4678 out = f"Saved data {preview}... in '{gef_convenience(data)}'"
4679 elif args.lang == "py":
4680 out = f"buf = [{sdata}]"
4681 elif args.lang == "c":
4682 c_type = self.format_matrix[args.bitlen][1]
4683 out = f"unsigned {c_type} buf[{args.length}] = {{{sdata}}};"
4684 elif args.lang == "js":
4685 out = f"var buf = [{sdata}]"
4686 elif args.lang == "asm":
4687 asm_type = self.format_matrix[args.bitlen][2]
4688 out = "buf {0} {1}".format(asm_type, sdata)
4689 elif args.lang == "hex":
4690 out = binascii.hexlify(gef.memory.read(start_addr, end_addr-start_addr)).decode()
4691 else:
4692 raise ValueError(f"Invalid format: {args.lang}")
4693
4694 if args.clip:
4695 if copy_to_clipboard(gef_pybytes(out)):
4696 info("Copied to clipboard")
4697 else:
4698 warn("There's a problem while copying")
4699
4700 gef_print(out)
4701 return
4702
4703
4704@register

Callers

nothing calls this directly

Calls 10

errFunction · 0.85
parse_addressFunction · 0.85
gef_convenienceFunction · 0.85
copy_to_clipboardFunction · 0.85
gef_pybytesFunction · 0.85
infoFunction · 0.85
warnFunction · 0.85
gef_printFunction · 0.85
joinMethod · 0.80
readMethod · 0.45

Tested by

no test coverage detected