c - NOP 雪橇如何工作?

标签 c assembly stack buffer-overflow no-op

我找不到一个很好的来源来回答这个问题。我知道 nop sled 是一种用于在缓冲区溢出攻击中规避堆栈随机化的技术,但我无法理解它是如何工作的。

说明此方法的简单示例是什么?

128 字节 nop sled 等术语是什么意思?

最佳答案

一些攻击包括使程序跳转到特定地址并从那里继续运行。注入(inject)的代码必须事先以某种方式加载到该确切位置。

堆栈随机化和其他运行时差异可能使程序跳转的地址无法预测,因此攻击者将 NOP sled 放置在大范围内存中。如果程序跳转到 sled 中的任何位置,它将运行所有剩余的 NOP,什么也不做,然后将运行负载代码,就在 sled 旁边。

攻击者使用 NOP sled 的原因是为了使目标地址更大:代码可以跳转到 sled 中的任何位置,而不是正好跳转到注入(inject)代码的开头。

一个 128 字节的 NOP sled 只是一组 128 字节宽的 NOP 指令。

注意 #1:NOP(No-OPeration)是大多数(所有?)架构中可用的指令,除了占用内存和一些运行时外什么都不做。

注意#2:在具有可变长度指令的体系结构中,一条 NOP 指令的长度通常只有一个字节,因此它可以用作方便的指令填充。不幸的是,这也使得制作 NOP sled 变得容易。

关于c - NOP 雪橇如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14760587/

相关文章:

C++ 分配仅具有已知列和未知行的矩阵时出现问题

iOS汇编代码

C#克隆一个堆栈

C++ 堆栈声明问题

java - "virtual"个文件

c++ - Eclipse C++ : fatal error: cheddar. h: 没有那个文件或目录

c - 如何为数组元素制作列表?

c - x86_64 汇编字符串操作导致段错误

c - C 等价于什么?

java - 为什么没有办法得到堆栈的实际大小?