同步操作将从 qiling/qiling 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
#!/usr/bin/env python3## Cross Platform and Multi Architecture Advanced Binary Emulation Framework#import sys, threading, unittest, socket, timesys.path.append("..")from qiling import Qilingfrom qiling.const import QL_VERBOSEclass SimpleGdbClient:DELAY = 0.6def __init__(self, host: str, port: int):sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)txtf = sock.makefile('w')sock.connect((host, port))self.__sock = sockself.__file = txtfdef __enter__(self):return selfdef __exit__(self, ex_type, ex_value, ex_traceback):self.__sock.close()@staticmethoddef checksum(data: str) -> int:return sum(ord(c) for c in data) & 0xffdef send(self, msg: str):time.sleep(SimpleGdbClient.DELAY)self.__file.write(f'${msg}#{SimpleGdbClient.checksum(msg):02x}')self.__file.flush()class DebuggerTest(unittest.TestCase):def test_gdbdebug_file_server(self):ql = Qiling(["../examples/rootfs/x8664_linux/bin/x8664_hello"], "../examples/rootfs/x8664_linux", verbose=QL_VERBOSE.DEBUG)ql.debugger = True# some random command test just to make sure we covered most of the commanddef gdb_test_client():# yield to allow ql to launch its gdbservertime.sleep(1.337 * 2)with SimpleGdbClient('127.0.0.1', 9999) as client:client.send('qSupported:multiprocess+;swbreak+;hwbreak+;qRelocInsn+;fork-events+;vfork-events+;exec-events+;vContSupported+;QThreadEvents+;no-resumed+;xmlRegisters=i386')client.send('vMustReplyEmpty')client.send('QStartNoAckMode')client.send('Hgp0.0')client.send('qXfer:auxv:read::0, 1000')client.send('?')client.send('qXfer:threads:read::0,fff')client.send(f'qAttached:{ql.os.pid}')client.send('qC')client.send('g')client.send('m555555554040, 1f8')client.send('m555555554000, 100')client.send('m200, 100')client.send('p10')client.send('Z0,555555554ada, 1')client.send('c')client.send('k')# yield to make sure ql gdbserver has enough time to receive our last commandtime.sleep(1.337)threading.Thread(target=gdb_test_client, daemon=True).start()ql.run()del qldef test_gdbdebug_shellcode_server(self):X8664_LIN = bytes.fromhex('31c048bbd19d9691d08c97ff48f7db53545f995257545eb03b0f05')ql = Qiling(code=X8664_LIN, archtype='x8664', ostype='linux')ql.debugger = 'gdb:127.0.0.1:9998'def gdb_test_client():# yield to allow ql to launch its gdbservertime.sleep(1.337 * 2)with SimpleGdbClient('127.0.0.1', 9998) as client:client.send('qSupported:multiprocess+;swbreak+;hwbreak+;qRelocInsn+;fork-events+;vfork-events+;exec-events+;vContSupported+;QThreadEvents+;no-resumed+;xmlRegisters=i386')client.send('vMustReplyEmpty')client.send('QStartNoAckMode')client.send('Hgp0.0')client.send('?')client.send('qC')client.send('g')client.send('p10')client.send('c')client.send('k')# yield to make sure ql gdbserver has enough time to receive our last commandtime.sleep(1.337)threading.Thread(target=gdb_test_client, daemon=True).start()ql.run()del qlif __name__ == "__main__":unittest.main()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。