Skip to content

Commit e3f7db2

Browse files
committed
Better handling of EB reg values
1 parent 2ee4ecc commit e3f7db2

File tree

1 file changed

+10
-9
lines changed

1 file changed

+10
-9
lines changed

qiling/debugger/gdb/gdb.py

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,12 @@ def __hexstr(value: int, nibbles: int = 0) -> str:
110110

111111
return value.to_bytes(length, byteorder).hex()
112112

113+
def __unkown_reg_value(nibbles: int) -> str:
114+
"""Encode the hex string for unknown regsiter value.
115+
"""
116+
117+
return 'x' * nibbles
118+
113119
def __get_reg_value(reg: Optional[int], pos: int, nibbles: int) -> str:
114120
# reg is either None or uc reg invalid
115121
if reg:
@@ -118,13 +124,13 @@ def __get_reg_value(reg: Optional[int], pos: int, nibbles: int) -> str:
118124

119125
hexstr = __hexstr(value, nibbles)
120126
else:
121-
hexstr = 'x' * nibbles
127+
hexstr = __unkown_reg_value(nibbles)
122128

123129
return hexstr
124130

125131
def __set_reg_value(reg: Optional[int], pos: int, nibbles: int, hexval: str) -> None:
126132
# reg is neither None nor uc reg invalid
127-
if reg:
133+
if reg and hexval != __unkown_reg_value(nibbles):
128134
assert len(hexval) == nibbles
129135

130136
val = int(hexval, 16)
@@ -243,14 +249,9 @@ def handle_G(subcmd: str) -> Reply:
243249
data = subcmd
244250

245251
for reg, pos, nibbles in self.regsmap:
246-
if reg:
247-
hexval = data[pos : pos + nibbles]
248-
249-
if hexval != 'x' * nibbles:
250-
val = int(hexval, 16)
252+
hexval = data[pos : pos + nibbles]
251253

252-
# TODO: should we swap val's endianess for big-endian targets?
253-
self.ql.arch.regs.write(reg, val)
254+
__set_reg_value(reg, pos, nibbles, hexval)
254255

255256
return REPLY_OK
256257

0 commit comments

Comments
 (0)