gpt4 book ai didi

security - 合法代码中出现 0x90 (NOP) 序列

转载 作者:行者123 更新时间:2023-12-03 22:56:27 25 4
gpt4 key购买 nike

背景:
我编写了一个 python 脚本来检查 IP 数据包,特别是数据包的有效载荷/数据,以检测它是否可以用于缓冲区(堆栈)溢出。现在据我所知,NOP 雪橇用于填充堆栈,以便指令指针最终会运行到您的漏洞利用代码中,我可以通过查找重复出现的 0x90 轻松检测到这一点。在 SQL slammer 的情况下,我已经看到包含许多 NOP 命令的代码少至 8,因此我可能至少可以使用 8。

现在我的问题是,合法代码中经常使用 NOP 雪橇吗?如果答案是肯定的,是否存在一些特定情况(这意味着我可以查找这些情况,然后将数据包排除为可能无害),或者这种方法对于识别恶意代码是否不实用?

最佳答案

编译器将生成 NOP 来对齐代码——例如,在 x86 的某些迭代中,如果跳转目​​标与 4、8 甚至 16 字节边界对齐,则跳转执行得更快。

一些编译器在可能的情况下尝试使用“长 NOP”——占用超过一个字节空间的单个指令,并且可能正式执行某些操作,但对处理器状态没有影响——就像在 x86 架构的某些迭代中一样快点。例如,66 90是一个两字节的 NOP,而 8d 74 26 00是一个四字节的 NOP(技术上是 lea 0(%esi,%eiz,1),%esi ,但正如你所看到的,它只是将 %esi 中的值复制到自身,所以没有效果)。然而,这些不能在所有情况下使用,并且在某些 x86 上最快的序列在其他人上通常很慢。我还没有阅读当前的微优化指南,但如果英特尔和 AMD 正在努力制作一串 90,我不会感到惊讶。 s 执行长时间 NOP 的最快方法,并且它们的编译器匹配。

关于security - 合法代码中出现 0x90 (NOP) 序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7788296/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com