Before revision: After W^X became widespread, an attacker wants to instead redirect execution to a separate, unprotected area containing the code to be run, making use of indirect transfers: one could target the virtual table for a forward-edge attack or change the call stack for a backward-edge attack ( i.e return-oriented programming).
After revision: After W^X became widespread, an attacker wants to instead redirect execution to a separate, unprotected area containing the code to be run, making use of indirect transfers: one could overwrite the virtual table for a forward-edge attack or change the call stack for a backward-edge attack ( return-oriented programming).