问题标签 [nop]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
324 浏览

python - 如何让 Python 解释器发出 NOP 指令?

有没有办法让 Python 的解释器将任何 Python 代码编译成 NOP 指令?

(我特意说的是通过编译 Python 代码来获取字节码,而不是直接生成它。)

0 投票
1 回答
328 浏览

.net - 为什么 ILGenerator.Emit() 在动态程序集中插入 nop 操作码?

我正在用 C# 构建一个小型编译器,因此不可避免地我不得不干预动态程序集和发出操作码。现在,奇怪的是我的 Emit() 调用在生成的模块中创建了额外的 nop 操作码。在我的情况下,它并不是那么重要,因为性能并不是真的很重要,但它确实让我感到困惑为什么会发生这种情况。它似乎是在加载或存储到本地或参数之后发生的。任何可以指出我可以检查的东西的 C#/动态程序集专家吗?我附上了生成代码的示例,如果需要更多信息,请告诉我。谢谢。

根据要求,这里概述了我的代码的外观。缺少一些东西,并且由于代码被分成单独的模块,这些是按照它们执行的顺序最相关的部分。

对于我的抽象语法树上的每个节点(用三个地址代码装饰),我只是这样做:

这是此函数产生的一系列调用:

我不知道这是否有帮助,如果您想查看我的完整项目,它位于:

http://github.com/yannikab/grc

与目标代码生成相关的所有内容都在 Cil 命名空间下。将所有东西放在一起用于代码生成的类名为 CilVisitor。

0 投票
3 回答
1196 浏览

assembly - Skylake 一个周期可以执行多少个 1 字节 NOP

我正在将分支目标与 NOP 对齐,有时 CPU 会执行这些 NOP,最多 15 个 NOP。Skylake 在一个周期内可以执行多少个 1 字节的 NOP?其他与 Intel 兼容的处理器(如 AMD)呢?我不仅对 Skylake 感兴趣,还对其他微架构感兴趣。执行 15 个 NOP 的序列可能需要多少个周期?我想知道添加这些 NOP 的额外代码大小和额外执行时间是否物有所值。这不是我添加这些 NOP 的人,而是我在编写align指令时自动添加的一个汇编程序。

更新:我已经管理汇编器NOP自动插入多字节。

0 投票
3 回答
5893 浏览

assembly - RISC-V NOP 指令

我最近正在研究 RISC-V 32I 指令。我有一个关于NOP指令的问题,规范说它等于ADDI x0, x0, 0.

但是,x0它不是一个可以被程序员修改的通用寄存器。因此,为什么x0在这里用作NOP指令的目标寄存器?

任何人都可以在这一点上阐明一些观点吗?

0 投票
1 回答
180 浏览

c - C/C++ 索引跳转到一组 NOP

我想产生一个时钟分辨率的延迟,所以我的想法是一个接一个地有 255 个 NOP,然后跳到最后一个减去所需的延迟。所以 0 会跳过最后一个 NOP,1 会跳过最后一个 NOP,255 会跳过第一个 NOP。

我以前使用过索引函数调用,但在这样的索引 goto 上找不到任何东西。我也想过使用 switch 语句,但这似乎还有其他指令。

任何建议都非常感激。

0 投票
2 回答
1526 浏览

c - Windows 中 asm("nop") 的实现

以分号结尾的空代码行是否等同于 asm("nop") 指令?

我查看了这个答案,这让我不想使用 x86 特定的使用内联汇编的实现。 `__asm nop` 是 GCC 编译器的 `asm volatile("nop");` 的 Windows 等价物吗

我可以使用这个 void __nop(); msdn似乎推荐的功能,但如果我不需要,我不想在库中拖动。 https://docs.microsoft.com/en-us/cpp/intrinsics/nop?view=vs-2017

有没有一种便宜的、可移植的方法来添加一个不会被编译出来的 nop 指令?我认为一个空分号要么是 nop 要么是编译出来的,但由于某种原因我今晚找不到任何关于它的信息。

澄清编辑 我可以使用内联 asm 为 x86 执行此操作,但我希望它是可移植的。我可以使用 Windows 库 __nop() 但我不想将该库导入到我的项目中,这是不受欢迎的开销。

我正在寻找一种更简洁的方法来生成不会被优化的 NOP 指令(最好使用标准 C 语法),可以将其制成 MACRO 并在整个项目中使用,具有最小的开销和工作(或者可以很容易地改进为工作)在 windows/linux/x86/x64 上。

谢谢。

0 投票
1 回答
2788 浏览

assembly - 为什么在 x86 程序集中将 NOP 分配给 0x90?

为什么nop分配到0x90intel x86 程序集上?

直觉上,我希望这0x00会映射到nop(也在xchg eax, eaxintel x86 上),因为它是ARM A32和其他一些架构的情况一样。

0 投票
1 回答
661 浏览

assembly - 多条 nop 指令不会始终比单条 nop 指令花费更长的时间

我在 C++ 中计时多个 NOP 指令和单个 NOP 指令,使用rdtsc. 但是,我没有得到执行 NOP 所需的周期数与执行的 NOP 数量成比例的增加。我很困惑为什么会这样。我的 CPU 是 Intel Core i7-5600U @ 2.60Ghz。

这是代码:

我得到的值如下:

在未设置处理器亲和性的情况下运行时。设置处理器亲和性$ taskset -c 0 ./nop$时,结果是:

为什么会这样?

0 投票
0 回答
173 浏览

gcc - 为什么在 GCC 编译的代码中,在 ret 或 jmp 之后会发现一些从未调用过的指令 nopl、nopw?

当我使用 gcc - (Ubuntu 7.4.0-1ubuntu1~18.04.1) 7.4.0 编译代码时 - 我在编译的代码中发现一些/所有函数末尾或绝对 jmp 之后的一些未使用的代码行。

结果似乎是对齐代码,但是:为什么不简单地使用一些 0 或 NOP?

我找到的未使用的代码行类似于我插入的以下代码行<==

  1. /li>
  2. /li>
0 投票
1 回答
558 浏览

buffer-overflow - 如何使用 NOP sled 绕过 ASLR

我正在尝试使用 NOP 雪橇绕过 ASLR。这是 vuln() 的程序集,抱歉我没有源代码:

二进制是 32 位的,堆栈是可执行的,所以我决定使用 NOP sled。我的有效载荷如下:

如果我的理解是正确的,如果我多次运行漏洞利用,返回地址可能会指向 NOP sled 中的某个位置,这将导致处理器执行我的 shellcode。

但是,我不知道如何近似返回地址。我尝试使用 gdb 二进制文件,它告诉我原始返回地址是 0xfc3fc758,所以我只使用该值。当我将有效负载提供给二进制文件时,它会以 SIGSEGV 退出。

经过一些调试后,我发现 vuln() 返回时会引发段错误,因此我尝试仅提供垃圾字节以查看发生了什么。事实证明,任何超过 152 字节的填充都会导致段错误,但我不知道为什么。我认为 160 字节必须是正确的,因为程序集告诉缓冲区从 ebp-0x9c 开始。

那么我是否正确使用了 NOP 雪橇?我怎样才能近似返回地址?