MCPcopy Create free account
hub / github.com/qilingframework/qiling / disassembler

Method disassembler

qiling/extensions/r2/r2.py:270–289  ·  view source on GitHub ↗

A human-friendly monkey patch of QlArchUtils.disassembler powered by r2, can be used for hook_code :param ql: Qiling instance :param addr: start address for disassembly :param size: size in bytes :param filt: regex pattern to filter instructions

(self, ql: 'Qiling', addr: int, size: int, filt: Pattern[str]=None)

Source from the content-addressed store, hash-verified

268 return insts
269
270 def disassembler(self, ql: 'Qiling', addr: int, size: int, filt: Pattern[str]=None) -> int:
271 '''A human-friendly monkey patch of QlArchUtils.disassembler powered by r2, can be used for hook_code
272 :param ql: Qiling instance
273 :param addr: start address for disassembly
274 :param size: size in bytes
275 :param filt: regex pattern to filter instructions
276 :return: progress of dissembler, should be equal to size if success
277 '''
278 anibbles = ql.arch.bits // 4
279 progress = 0
280 for inst in self.dis_nbytes(addr, size):
281 if inst.type.lower() in ('invalid', 'ill'):
282 break # stop disasm
283 name, offset = self.at(inst.offset, parse=True)
284 if filt is None or filt.search(name):
285 ql.log.info(f'{inst.offset:0{anibbles}x} [{name:20s} + {offset:#08x}] {inst.bytes.hex(" "):20s} {inst.disasm}')
286 progress = inst.offset + inst.size - addr
287 if progress < size:
288 ql.arch.utils.disassembler(ql, addr + progress, size - progress)
289 return progress
290
291 def enable_disasm(self, filt_str: str=''):
292 filt = re.compile(filt_str)

Callers

nothing calls this directly

Calls 3

dis_nbytesMethod · 0.95
atMethod · 0.95
searchMethod · 0.45

Tested by

no test coverage detected