Stack canaries live in an area of memory that programs can read as well as write. In the typical buffer over?ow attack (e.g., via the gets() function), what prevents an attacker from simply reading the canary value and then placing that canary value in the over?ow payload?