You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NASM中Long nop指令:是否有内置方式生成指定长度多字节nop?

NASM中生成指定长度的Long Nop指令

当然有办法在NASM里生成指定长度的多字节nop(long nop),不过NASM本身并没有直接的内置指令可以一键指定长度生成,但咱们可以通过几种灵活的方式实现这个需求:

  • 用times指令组合多字节nop序列
    这是最直接的做法,先明确x86架构下常见的合法多字节nop及其长度:

    • db 0x90:1字节基础nop
    • db 0x66, 0x90:2字节nop
    • db 0x0f, 0x1f, 0x00:3字节nop
    • db 0x0f, 0x1f, 0x40, 0x00:4字节nop
      你可以根据目标长度,组合这些序列。比如要生成10字节的long nop,代码可以这么写:
    ; 凑出10字节的long nop
    times 2 db 0x0f, 0x1f, 0x40, 0x00  ; 2个4字节nop,共8字节
    times 2 db 0x90                    ; 2个1字节nop,共2字节
    ; 总长度10字节
    
  • 自定义宏实现一键生成
    如果经常需要生成不同长度的long nop,写个宏能省不少事。下面这个宏会自动根据传入的长度,优先使用更长的nop指令来凑数:

    %macro long_nop 1
        %assign remaining %1
        ; 优先用4字节nop,减少指令数量
        %while remaining >= 4
            db 0x0f, 0x1f, 0x40, 0x00
            %assign remaining remaining - 4
        %endwhile
        ; 处理剩余的字节
        %if remaining >= 2
            db 0x66, 0x90
            %assign remaining remaining - 2
        %endif
        %if remaining >= 1
            db 0x90
            %assign remaining remaining - 1
        %endif
    %endmacro
    
    ; 调用宏生成15字节的long nop
    long_nop 15
    

    这个宏会自动处理所有1及以上的长度需求,生成的都是合法、无副作用的多字节nop。

  • 注意架构兼容性
    上面提到的这些多字节nop序列在32位x86和x86-64架构下都能正常工作,不会被CPU解析成其他功能指令,完全可以放心使用。

内容的提问来源于stack exchange,提问作者BeeOnRope

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:30:22