代码重用(code reuse),理学-计算机科学技术-信息安全-信息系统安全-软件安全-恶意代码,利用内存中已经存在的代码片段实现新的功能逻辑的程序执行方式。在网络攻击领域,利用代码重用技术,通过跳转指令将内存空间中已有的、分散的代码片段链接,构造出其所期望的、具有攻击目的的功能逻辑,最终实现在不引入外部代码的情况下实施控制流劫持后的恶意攻击。攻击者利用缓冲区溢出、UAF(use-after-free)等常见漏洞,往往能够成功控制线程调用栈中的返回地址或保存程序跳转目标(代码指针)的寄存器,形成控制流劫持。通过将控制流重定向到其所期望的任何有效代码区域,即可造成任意代码执行的高风险威胁。在早期的漏洞利用中,攻击者直接将所劫持的控制流重定向到已精心布局(注入)在栈或堆中的外部代码,进行后续执行。但数据执行保护(data execution prevention,DEP)等安全特性被广泛部署于主流操作系统中,使得漏洞攻击的难度被显著提高。Apple公司在iOS系统中引入的代码签名机制则比DEP等更为严格,只有包含已签名代码的内存页才具有执行权限,这也同样限制了外部注入的代码执行。