Skip to content
Vol. 1 · Ed. 2026
CyberGlossary
Entry № 925

面向返回的编程(ROP)

面向返回的编程(ROP) 是什么?

面向返回的编程(ROP)ROP 是一种代码复用利用技术,通过把以 RET 结尾的短指令序列(gadget)串成链来执行任意计算,而无需注入新代码。


Hovav Shacham 于 2007 年提出 ROP,用以绕过 DEP/W^X。攻击者破坏栈并写入一串地址,每个地址指向以 RET 结尾的短 gadget;每个 gadget 执行完后 RET 弹出下一个地址,从而仅利用已有可执行字节(libc、库、程序自身)构造出图灵完备的计算。变种包括 JOP(jmp 链)、COP(call 链)和 SROP(信号帧)。ROP 是推动 ASLR、CFI、栈金丝雀、影子栈、Intel CET 与内存安全语言标准化的主要原因,防御策略分别针对 gadget 可用性、控制流完整性或源代码层面的内存安全。

示例

  1. 01

    利用 glibc 中的 pop-rdi/syscall gadget 链调用 execve("/bin/sh")。

  2. 02

    通过 KASLR 信息泄露和 ROP 进入 commit_creds(prepare_kernel_cred(0)) 提权。

常见问题

面向返回的编程(ROP) 是什么?

ROP 是一种代码复用利用技术,通过把以 RET 结尾的短指令序列(gadget)串成链来执行任意计算,而无需注入新代码。 它属于网络安全的 应用安全 分类。

面向返回的编程(ROP) 是什么意思?

ROP 是一种代码复用利用技术,通过把以 RET 结尾的短指令序列(gadget)串成链来执行任意计算,而无需注入新代码。

面向返回的编程(ROP) 是如何工作的?

Hovav Shacham 于 2007 年提出 ROP,用以绕过 DEP/W^X。攻击者破坏栈并写入一串地址,每个地址指向以 RET 结尾的短 gadget;每个 gadget 执行完后 RET 弹出下一个地址,从而仅利用已有可执行字节(libc、库、程序自身)构造出图灵完备的计算。变种包括 JOP(jmp 链)、COP(call 链)和 SROP(信号帧)。ROP 是推动 ASLR、CFI、栈金丝雀、影子栈、Intel CET 与内存安全语言标准化的主要原因,防御策略分别针对 gadget 可用性、控制流完整性或源代码层面的内存安全。

如何防御 面向返回的编程(ROP)?

针对 面向返回的编程(ROP) 的防御通常结合技术控制与运营实践,详见上方完整定义。

面向返回的编程(ROP) 还有哪些其他名称?

常见的别称包括: ROP, 代码复用攻击, Return-to-libc。

相关术语

参见