1. INTRODUCTION  
2. BACKGROUND  
2.1. Data Execution Prevention  
2.2. Code-Reuse Attacks  
2.3. Return-to-Library Attack  
2.4. Address Space Layout Randomization  
3. RETURN-ORIENTED PROGRAMMING  
4. BYPASSING DEP AND ASLR WITH ROP  
5. JUMP-ORIENTED PROGRAMMING  
6. SIGRETURN-ORIENTED PROGRAMMING  
7. CONTROL FLOW INTEGRITY  
8. USING GADGETS THAT IMMEDIATELY FOLLOW CALL INSTRUCTIONS  
9. REUSE OF FUNCTIONS  
10. DATA FLOW EXPLOITATION  
11. GENERAL CODE REUSE EXPLOIT GENERATION SCHEME  
12. GADGET CATALOG  
12.1. Turing-Complete Gadget Catalog  
13. GADGET SEARCH  
14. DETERMINING GADGET SEMANTICS  
15. GADGET CHAINS GENERATION  
16. RESTRICTED SYMBOLS  
17. EXPERIMENTAL TOOLS COMPARISON  
18. CONCLUSIONS