Taming transactions: Towards hardware-assisted control flow integrity using transactional memory