Skip to content

Commit 7634856

Browse files
committed
adapt changes according to qiling-next
1 parent d201bdb commit 7634856

File tree

13 files changed

+201
-197
lines changed

13 files changed

+201
-197
lines changed

qiling/debugger/qdb/arch/arch_arm.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ def thumb_mode(self) -> bool:
6767
helper function for checking thumb mode
6868
"""
6969

70-
return self.ql.reg.cpsr & 0x00000020 != 0
70+
return self.ql.arch.regs.cpsr & 0x00000020 != 0
7171

7272
def read_insn(self, address: int) -> bytes:
7373
"""

qiling/debugger/qdb/branch_predictor/branch_predictor.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ def read_reg(self, reg_name):
3535
read specific register value
3636
"""
3737

38-
return self.ql.reg.read(reg_name)
38+
return self.ql.arch.regs.read(reg_name)
3939

4040
def predict(self):
4141
"""

qiling/debugger/qdb/branch_predictor/branch_predictor_arm.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ def __init__(self, ql):
2323

2424
def read_reg(self, reg_name):
2525
reg_name = reg_name.replace("ip", "r12").replace("fp", "r11")
26-
return getattr(self.ql.reg, reg_name)
26+
return getattr(self.ql.arch.regs, reg_name)
2727

2828
def regdst_eq_pc(self, op_str):
2929
return op_str.partition(", ")[0] == "pc"
@@ -123,7 +123,7 @@ def predict(self):
123123
}
124124

125125
if line.mnemonic in jump_table:
126-
prophecy.going = jump_table.get(line.mnemonic)(*self.get_cpsr(self.ql.reg.cpsr))
126+
prophecy.going = jump_table.get(line.mnemonic)(*self.get_cpsr(self.ql.arch.regs.cpsr))
127127

128128
elif line.mnemonic in cb_table:
129129
prophecy.going = cb_table.get(line.mnemonic)(self.read_reg(line.op_str.split(", ")[0]))
@@ -153,7 +153,7 @@ def predict(self):
153153
"ls": lambda V, C, Z, N: (C == 0 or Z == 1),
154154
"le": lambda V, C, Z, N: (Z == 1 or N != V),
155155
"hi": lambda V, C, Z, N: (Z == 0 and C == 1),
156-
}.get(line.op_str)(*self.get_cpsr(self.ql.reg.cpsr))
156+
}.get(line.op_str)(*self.get_cpsr(self.ql.arch.regs.cpsr))
157157

158158
it_block_range = [each_char for each_char in line.mnemonic[1:]]
159159

@@ -184,7 +184,7 @@ def predict(self):
184184
prophecy.where = self.unpack32(self.read_mem(self.read_reg(r), self.INST_SIZE))
185185

186186
elif line.mnemonic in ("addls", "addne", "add") and self.regdst_eq_pc(line.op_str):
187-
V, C, Z, N = self.get_cpsr(self.ql.reg.cpsr)
187+
V, C, Z, N = self.get_cpsr(self.ql.arch.regs.cpsr)
188188
r0, r1, r2, *imm = line.op_str.split(", ")
189189

190190
# program counter is awalys 8 bytes ahead when it comes with pc, need to add extra 8 bytes
@@ -234,7 +234,7 @@ def predict(self):
234234
"pophi": lambda V, C, Z, N: (C == 1),
235235
"popge": lambda V, C, Z, N: (N == V),
236236
"poplt": lambda V, C, Z, N: (N != V),
237-
}.get(line.mnemonic)(*self.get_cpsr(self.ql.reg.cpsr)):
237+
}.get(line.mnemonic)(*self.get_cpsr(self.ql.arch.regs.cpsr)):
238238

239239
prophecy.where = cur_addr + self.INST_SIZE
240240

qiling/debugger/qdb/branch_predictor/branch_predictor_mips.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ def is_negative(i: int) -> int:
3636

3737
def read_reg(self, reg_name):
3838
reg_name = reg_name.strip("$").replace("fp", "s8")
39-
return self.signed_val(getattr(self.ql.reg, reg_name))
39+
return self.signed_val(getattr(self.ql.arch.regs, reg_name))
4040

4141
def predict(self):
4242
prophecy = self.Prophecy()

qiling/debugger/qdb/branch_predictor/branch_predictor_x86.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -91,11 +91,11 @@ def predict(self):
9191
}
9292

9393
if line.mnemonic in jump_table:
94-
eflags = self.get_flags(self.ql.reg.ef).values()
94+
eflags = self.get_flags(self.ql.arch.regs.ef).values()
9595
prophecy.going = jump_table.get(line.mnemonic)(*eflags)
9696

9797
elif line.mnemonic in jump_reg_table:
98-
prophecy.going = jump_reg_table.get(line.mnemonic)(self.ql.reg.ecx)
98+
prophecy.going = jump_reg_table.get(line.mnemonic)(self.ql.arch.regs.ecx)
9999

100100
if prophecy.going:
101101
takeaway_list = ["ptr", "dword", "[", "]"]
@@ -106,19 +106,19 @@ def predict(self):
106106
new_line = new_line.replace(each, " ")
107107

108108
new_line = " ".join(new_line.split())
109-
for each_reg in filter(lambda r: len(r) == 3, self.ql.reg.register_mapping.keys()):
109+
for each_reg in filter(lambda r: len(r) == 3, self.ql.arch.regs.register_mapping.keys()):
110110
if each_reg in new_line:
111111
new_line = re.sub(each_reg, hex(self.read_reg(each_reg)), new_line)
112112

113-
for each_reg in filter(lambda r: len(r) == 2, self.ql.reg.register_mapping.keys()):
113+
for each_reg in filter(lambda r: len(r) == 2, self.ql.arch.regs.register_mapping.keys()):
114114
if each_reg in new_line:
115115
new_line = re.sub(each_reg, hex(self.read_reg(each_reg)), new_line)
116116

117117

118118
prophecy.where = check_and_eval(new_line)
119119

120-
elif line.op_str in self.ql.reg.register_mapping:
121-
prophecy.where = self.ql.reg.read(line.op_str)
120+
elif line.op_str in self.ql.arch.regs.register_mapping:
121+
prophecy.where = self.ql.arch.regs.read(line.op_str)
122122

123123
else:
124124
prophecy.where = read_int(line.op_str)

qiling/debugger/qdb/context.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class Context:
1919

2020
def __init__(self, ql):
2121
self.ql = ql
22-
self.pointersize = self.ql.pointersize
22+
self.pointersize = self.ql.arch.pointersize
2323
self.unpack = ql.unpack
2424
self.unpack16 = ql.unpack16
2525
self.unpack32 = ql.unpack32
@@ -31,7 +31,7 @@ def cur_addr(self):
3131
program counter of qiling instance
3232
"""
3333

34-
return self.ql.reg.arch_pc
34+
return self.ql.arch.regs.arch_pc
3535

3636
def read_mem(self, address: int, size: int):
3737
"""
@@ -45,7 +45,7 @@ def disasm(self, address: int, detail: bool = False) -> Optional[CsInsn]:
4545
helper function for disassembling
4646
"""
4747

48-
md = self.ql.disassembler
48+
md = self.ql.arch.disassembler
4949
md.detail = detail
5050

5151
return next(md.disasm(self.read_insn(address), address), None)

qiling/debugger/qdb/frontend.py

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -165,7 +165,6 @@ def setup_ctx_manager(ql: Qiling) -> CtxManager:
165165
return {
166166
QL_ARCH.X86: CtxManager_X86,
167167
QL_ARCH.ARM: CtxManager_ARM,
168-
QL_ARCH.ARM_THUMB: CtxManager_ARM,
169168
QL_ARCH.CORTEX_M: CtxManager_ARM,
170169
QL_ARCH.MIPS: CtxManager_MIPS,
171170
}.get(ql.arch.type)(ql)
@@ -185,7 +184,7 @@ def print_asm(self, insn: CsInsn, to_jump: Optional[bool] = None, address: int =
185184
trace_line = f"0x{insn.address:08x}{opcode:10s} {insn.mnemonic:10} {insn.op_str:35s}"
186185

187186
cursor = " "
188-
if self.ql.reg.arch_pc == insn.address:
187+
if self.ql.arch.regs.arch_pc == insn.address:
189188
cursor = "►"
190189

191190
jump_sign = " "
@@ -195,7 +194,7 @@ def print_asm(self, insn: CsInsn, to_jump: Optional[bool] = None, address: int =
195194
print(f"{jump_sign} {cursor} {color.DARKGRAY}{trace_line}{color.END}")
196195

197196
def dump_regs(self):
198-
return {reg_name: getattr(self.ql.reg, reg_name) for reg_name in self.regs}
197+
return {reg_name: getattr(self.ql.arch.regs, reg_name) for reg_name in self.regs}
199198

200199
def context_reg(self, saved_states):
201200
return NotImplementedError
@@ -204,12 +203,12 @@ def context_reg(self, saved_states):
204203
def context_stack(self):
205204

206205
for idx in range(10):
207-
addr = self.ql.reg.arch_sp + idx * self.ql.pointersize
208-
if (val := _try_read(self.ql, addr, self.ql.pointersize)[0]):
209-
print(f"$sp+0x{idx*self.ql.pointersize:02x}│ [0x{addr:08x}] —▸ 0x{self.ql.unpack(val):08x}", end="")
206+
addr = self.ql.arch.regs.arch_sp + idx * self.ql.arch.pointersize
207+
if (val := _try_read(self.ql, addr, self.ql.arch.pointersize)[0]):
208+
print(f"$sp+0x{idx*self.ql.arch.pointersize:02x}│ [0x{addr:08x}] —▸ 0x{self.ql.unpack(val):08x}", end="")
210209

211210
# try to dereference wether it's a pointer
212-
if (buf := _try_read(self.ql, addr, self.ql.pointersize))[0] is not None:
211+
if (buf := _try_read(self.ql, addr, self.ql.arch.pointersize))[0] is not None:
213212

214213
if (addr := self.ql.unpack(buf[0])):
215214

@@ -230,7 +229,7 @@ def context_stack(self):
230229
def context_asm(self):
231230
# assembly before current location
232231
past_list = []
233-
cur_addr = self.ql.reg.arch_pc
232+
cur_addr = self.ql.arch.regs.arch_pc
234233

235234
line = disasm(self.ql, cur_addr-0x10)
236235

@@ -336,7 +335,7 @@ def context_reg(self, saved_reg_dump):
336335
lines += line
337336

338337
print(lines.format(*cur_regs.values()))
339-
print(color.GREEN, "[{cpsr[mode]} mode], Thumb: {cpsr[thumb]}, FIQ: {cpsr[fiq]}, IRQ: {cpsr[irq]}, NEG: {cpsr[neg]}, ZERO: {cpsr[zero]}, Carry: {cpsr[carry]}, Overflow: {cpsr[overflow]}".format(cpsr=self.get_flags(self.ql.reg.cpsr)), color.END, sep="")
338+
print(color.GREEN, "[{cpsr[mode]} mode], Thumb: {cpsr[thumb]}, FIQ: {cpsr[fiq]}, IRQ: {cpsr[irq]}, NEG: {cpsr[neg]}, ZERO: {cpsr[zero]}, Carry: {cpsr[carry]}, Overflow: {cpsr[overflow]}".format(cpsr=self.get_flags(self.ql.arch.regs.cpsr)), color.END, sep="")
340339

341340

342341
class CtxManager_MIPS(CtxManager):
@@ -417,12 +416,12 @@ def context_reg(self, saved_reg_dump):
417416
lines += line
418417

419418
print(lines.format(*cur_regs.values()))
420-
print(color.GREEN, "EFLAGS: [CF: {flags[CF]}, PF: {flags[PF]}, AF: {flags[AF]}, ZF: {flags[ZF]}, SF: {flags[SF]}, OF: {flags[OF]}]".format(flags=get_x86_eflags(self.ql.reg.ef)), color.END, sep="")
419+
print(color.GREEN, "EFLAGS: [CF: {flags[CF]}, PF: {flags[PF]}, AF: {flags[AF]}, ZF: {flags[ZF]}, SF: {flags[SF]}, OF: {flags[OF]}]".format(flags=get_x86_eflags(self.ql.arch.regs.ef)), color.END, sep="")
421420

422421
@context_printer("[ DISASM ]", footer=True)
423422
def context_asm(self):
424423
past_list = []
425-
cur_addr = self.ql.reg.arch_pc
424+
cur_addr = self.ql.arch.regs.arch_pc
426425

427426
cur_insn = disasm(self.ql, cur_addr)
428427
prophecy = self.predictor.predict()
@@ -494,7 +493,7 @@ def context_reg(self, saved_reg_dump):
494493
lines += line
495494

496495
print(lines.format(cur_regs.values()))
497-
print(color.GREEN, "[{cpsr[mode]} mode], Thumb: {cpsr[thumb]}, FIQ: {cpsr[fiq]}, IRQ: {cpsr[irq]}, NEG: {cpsr[neg]}, ZERO: {cpsr[zero]}, Carry: {cpsr[carry]}, Overflow: {cpsr[overflow]}".format(cpsr=get_arm_flags(self.ql.reg.cpsr)), color.END, sep="")
496+
print(color.GREEN, "[{cpsr[mode]} mode], Thumb: {cpsr[thumb]}, FIQ: {cpsr[fiq]}, IRQ: {cpsr[irq]}, NEG: {cpsr[neg]}, ZERO: {cpsr[zero]}, Carry: {cpsr[carry]}, Overflow: {cpsr[overflow]}".format(cpsr=get_arm_flags(self.ql.arch.regs.cpsr)), color.END, sep="")
498497

499498

500499
if __name__ == "__main__":

0 commit comments

Comments
 (0)