def set_register(self, register, value): msg = create_avatar_message("AVATAR_RPC_HTD_SET_REGISTER", {"register": register, "value": value}) expected_replies = ["AVATAR_RPC_DTH_REPLY_OK", "AVATAR_RPC_DTH_REPLY_ERROR"] cv = threading.Condition() ref = Reference() cv.acquire() self._queued_commands.put((msg, expected_replies, cv, ref)) cv.wait() cv.release()
def set_register(self, register, value): msg = create_avatar_message("AVATAR_RPC_HTD_SET_REGISTER", {"register": register, "value": value}) expected_replies = ["AVATAR_RPC_DTH_REPLY_OK", "AVATAR_RPC_DTH_REPLY_ERROR"] cv = threading.Condition() ref = Reference() cv.acquire() self._queued_commands.put((msg, expected_replies, cv, ref)) cv.wait() cv.release()
def cont(self): msg = create_avatar_message("AVATAR_RPC_HTD_RESUME_VM", {}) expected_replies = ["AVATAR_RPC_DTH_REPLY_OK", "AVATAR_RPC_DTH_REPLY_ERROR"] cv = threading.Condition() ref = Reference() cv.acquire() self._queued_commands.put((msg, expected_replies, cv, ref)) cv.wait() cv.release() if ref.get_value().name == "AVATAR_RPC_DTH_REPLY_ERROR": raise AvatarRemoteError(ref.get_value().error)
def execute_codelet(self, address): msg = create_avatar_message("AVATAR_RPC_HTD_CODELET_EXECUTE", {"address": address}) expected_replies = ["AVATAR_RPC_DTH_REPLY_CODELET_EXECUTION_FINISHED", "AVATAR_RPC_DTH_REPLY_ERROR"] cv = threading.Condition() ref = Reference() cv.acquire() self._queued_commands.put((msg, expected_replies, cv, ref)) cv.wait() cv.release() if ref.get_value().name == "AVATAR_RPC_DTH_REPLY_ERROR": raise AvatarRemoteError(ref.get_value().error)
def write_memory(self, address, size, value): msg = create_avatar_message("AVATAR_RPC_HTD_WRITE_MEMORY", {"address": address, "size": size, "value": value}) expected_replies = ["AVATAR_RPC_DTH_REPLY_OK", "AVATAR_RPC_DTH_REPLY_ERROR"] cv = threading.Condition() ref = Reference() cv.acquire() self._queued_commands.put((msg, expected_replies, cv, ref)) cv.wait() cv.release() if ref.get_value().name == "AVATAR_RPC_DTH_REPLY_ERROR": raise AvatarRemoteError(ref.get_value().error)
def cont(self): msg = create_avatar_message("AVATAR_RPC_HTD_RESUME_VM", {}) expected_replies = ["AVATAR_RPC_DTH_REPLY_OK", "AVATAR_RPC_DTH_REPLY_ERROR"] cv = threading.Condition() ref = Reference() cv.acquire() self._queued_commands.put((msg, expected_replies, cv, ref)) cv.wait() cv.release() if ref.get_value().name == "AVATAR_RPC_DTH_REPLY_ERROR": raise AvatarRemoteError(ref.get_value().error)
def execute_codelet(self, address): msg = create_avatar_message("AVATAR_RPC_HTD_CODELET_EXECUTE", {"address": address}) expected_replies = ["AVATAR_RPC_DTH_REPLY_CODELET_EXECUTION_FINISHED", "AVATAR_RPC_DTH_REPLY_ERROR"] cv = threading.Condition() ref = Reference() cv.acquire() self._queued_commands.put((msg, expected_replies, cv, ref)) cv.wait() cv.release() if ref.get_value().name == "AVATAR_RPC_DTH_REPLY_ERROR": raise AvatarRemoteError(ref.get_value().error)
def write_memory(self, address, size, value): msg = create_avatar_message("AVATAR_RPC_HTD_WRITE_MEMORY", {"address": address, "size": size, "value": value}) expected_replies = ["AVATAR_RPC_DTH_REPLY_OK", "AVATAR_RPC_DTH_REPLY_ERROR"] cv = threading.Condition() ref = Reference() cv.acquire() self._queued_commands.put((msg, expected_replies, cv, ref)) cv.wait() cv.release() if ref.get_value().name == "AVATAR_RPC_DTH_REPLY_ERROR": raise AvatarRemoteError(ref.get_value().error)
def get_register(self, register): msg = create_avatar_message("AVATAR_RPC_HTD_GET_REGISTER", {"register": register}) expected_replies = ["AVATAR_RPC_DTH_REPLY_GET_REGISTER", "AVATAR_RPC_DTH_REPLY_ERROR"] cv = threading.Condition() ref = Reference() cv.acquire() self._queued_commands.put((msg, expected_replies, cv, ref)) cv.wait() cv.release() if ref.get_value().name == "AVATAR_RPC_DTH_REPLY_ERROR": raise AvatarRemoteError(ref.get_value().error) return ref.get_value().value
def handle_asynchronous_message(self, msg): if msg.name == "AVATAR_RPC_DTH_PAGEFAULT": page_data = self._page_fault_handler(msg.page_address) self.insert_page(msg.page_address, page_data) self._send_lock.acquire() self._protocol.send_message(create_avatar_message("AVATAR_RPC_HTD_CONTINUE_FROM_PAGEFAULT", {})) self._send_lock.release() elif msg.name == "AVATAR_RPC_DTH_STATE": self._state = msg.state elif msg.name == "AVATAR_RPC_DTH_INFO_EXCEPTION": self._exception_handler(msg.exception) self._asynchronous_messages_handler(msg)
def get_register(self, register): msg = create_avatar_message("AVATAR_RPC_HTD_GET_REGISTER", {"register": register}) expected_replies = ["AVATAR_RPC_DTH_REPLY_GET_REGISTER", "AVATAR_RPC_DTH_REPLY_ERROR"] cv = threading.Condition() ref = Reference() cv.acquire() self._queued_commands.put((msg, expected_replies, cv, ref)) cv.wait() cv.release() if ref.get_value().name == "AVATAR_RPC_DTH_REPLY_ERROR": raise AvatarRemoteError(ref.get_value().error) return ref.get_value().value
def handle_asynchronous_message(self, msg): if msg.name == "AVATAR_RPC_DTH_PAGEFAULT": page_data = self._page_fault_handler(msg.page_address) self.insert_page(msg.page_address, page_data) self._send_lock.acquire() self._protocol.send_message(create_avatar_message("AVATAR_RPC_HTD_CONTINUE_FROM_PAGEFAULT", {})) self._send_lock.release() elif msg.name == "AVATAR_RPC_DTH_STATE": self._state = msg.state elif msg.name == "AVATAR_RPC_DTH_INFO_EXCEPTION": self._exception_handler(msg.exception) self._asynchronous_messages_handler(msg)
def write_memory_untyped(self, address, data): assert(len(data) <= 255) assert(isinstance(data, bytes)) msg = create_avatar_message("AVATAR_RPC_HTD_WRITE_UNTYPED_MEMORY", {"address": address, "data": data}) expected_replies = ["AVATAR_RPC_DTH_REPLY_OK", "AVATAR_RPC_DTH_REPLY_ERROR"] cv = threading.Condition() ref = Reference() cv.acquire() self._queued_commands.put((msg, expected_replies, cv, ref)) cv.wait() cv.release() if ref.get_value().name == "AVATAR_RPC_DTH_REPLY_ERROR": raise AvatarRemoteError(ref.get_value().error)
def write_memory_untyped(self, address, data): assert(len(data) <= 255) assert(isinstance(data, bytes)) msg = create_avatar_message("AVATAR_RPC_HTD_WRITE_UNTYPED_MEMORY", {"address": address, "data": data}) expected_replies = ["AVATAR_RPC_DTH_REPLY_OK", "AVATAR_RPC_DTH_REPLY_ERROR"] cv = threading.Condition() ref = Reference() cv.acquire() self._queued_commands.put((msg, expected_replies, cv, ref)) cv.wait() cv.release() if ref.get_value().name == "AVATAR_RPC_DTH_REPLY_ERROR": raise AvatarRemoteError(ref.get_value().error)
def read_memory_untyped(self, address, size): assert(size <= 255) msg = create_avatar_message("AVATAR_RPC_HTD_READ_UNTYPED_MEMORY", {"address": address, "size": size}) expected_replies = ["AVATAR_RPC_DTH_REPLY_READ_UNTYPED_MEMORY", "AVATAR_RPC_DTH_REPLY_ERROR"] cv = threading.Condition() ref = Reference() cv.acquire() self._queued_commands.put((msg, expected_replies, cv, ref)) cv.wait() cv.release() if ref.get_value().name == "AVATAR_RPC_DTH_REPLY_ERROR": raise AvatarRemoteError(ref.get_value().error) return ref.get_value().data
def read_memory_untyped(self, address, size): assert(size <= 255) msg = create_avatar_message("AVATAR_RPC_HTD_READ_UNTYPED_MEMORY", {"address": address, "size": size}) expected_replies = ["AVATAR_RPC_DTH_REPLY_READ_UNTYPED_MEMORY", "AVATAR_RPC_DTH_REPLY_ERROR"] cv = threading.Condition() ref = Reference() cv.acquire() self._queued_commands.put((msg, expected_replies, cv, ref)) cv.wait() cv.release() if ref.get_value().name == "AVATAR_RPC_DTH_REPLY_ERROR": raise AvatarRemoteError(ref.get_value().error) return ref.get_value().data