返回导向编程

堆栈溢出攻击

ROP是一种高级的堆栈溢出攻击。这类攻击往往利用操作堆栈调用时的程序漏洞，通常是缓冲区溢出。在缓冲区溢出中，在将数据存入内存前未能正确检查适当范围的函数会收到多于正常承受范围的数据，如果数据将写入栈，多余的数据会溢出为函数变量分配的空间并覆盖替换返回地址（return address）。在原本用以重定向控制流并返回给调用者的地址被覆盖替换后，控制流将改写到新分配的地址。
标准的缓冲区溢出攻击，攻击者只需要写出针对堆栈部分的代码（有效载荷）。直到1990年代后期，主流操作系统没有为该类攻击作出任何防范，微软直到2004年才提供了缓冲区溢出保护。操作系统最终使用数据执行保护技术来修补这个漏洞，该技术标记内存数据不可执行。 启用数据执行保护，机器将拒绝执行任何内存中user级别可写区域的代码。该技术的硬件支持不久用以加强该防范。