From 1189c2b4d9106857f6da67fc3dbbdafbb509cb84 Mon Sep 17 00:00:00 2001 From: Sh4w Date: Mon, 22 Jul 2024 17:21:11 +0800 Subject: [PATCH] Improve performance of read_string --- src/chomper/core.py | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) diff --git a/src/chomper/core.py b/src/chomper/core.py index d3d7eee..b0040b3 100644 --- a/src/chomper/core.py +++ b/src/chomper/core.py @@ -640,15 +640,28 @@ def read_bytes(self, address: int, size: int) -> bytes: def read_string(self, address: int) -> str: """Read string from the address.""" data = bytes() - offset = 0 - while True: - byte = self.read_bytes(address + offset, 1) - if byte == b"\x00": - break + block_size = 1024 + end = b"\x00" - data += byte - offset += 1 + try: + while True: + buf = self.read_bytes(address, block_size) + if buf.find(end) != -1: + data += buf[: buf.index(end)] + break + + data += buf + address += block_size + + except UcError: + for i in range(block_size): + buf = self.read_bytes(address + i, 1) + if buf == end: + break + + data += buf + address += 1 return data.decode("utf-8")