def peek_bytes(pid, address, num_bytes): reads = num_bytes // 4 remainder = num_bytes % 4 data = '' for i in range(reads): data = data + pack('<i', tracereplay.peek_address(pid, address)) address = address + 4 if remainder != 0: last_chunk = pack('<i', tracereplay.peek_address(pid, address)) data = data + last_chunk[:remainder] return data
def extract_socketcall_parameters(pid, address, num): params = [] for i in range(num): params += [tracereplay.peek_address(pid, address)] address = address + 4 logging.debug('Extracted socketcall parameters: %s', params) return params
def peek_string(pid, address): data = '' while True: data = data + pack('<i', tracereplay.peek_address(pid, address)) address = address + 4 if '\0' in data: while '\0' in data: data = data[:data.rfind('\0')] return data
def write_buffer(pid, address, value, buffer_length): writes = [value[i:i+4] for i in range(0, len(value), 4)] trailing = len(value) % 4 if trailing != 0: left = writes.pop() for i in writes: i = i[::-1] data = int(binascii.hexlify(i), 16) tracereplay.poke_address(pid, address, data) address = address + 4 if trailing != 0: address = address data = tracereplay.peek_address(pid, address) d = pack('i', data) d = left + d[len(left):] tracereplay.poke_address(pid, address, unpack('i', d)[0])