无 NULL 的 shellcode

cyt*_*nus 7 null x86 assembly instruction-set shellcode

我正在尝试将我编写的汇编程序转换为无 NULL 的 shellcode。

但是,我不确定如何执行某些说明。
其中一些(采用英特尔语法)包括:

push 0x1000
Run Code Online (Sandbox Code Playgroud)

mov BYTE [eax],0x31
Run Code Online (Sandbox Code Playgroud)

我想避免使用数千inc eax条指令。我在想也许可以用xor-ing 值来一些创造性的东西,其次,也许可以设置一个标志来使其只需要 8 位的常量。

use*_*783 5

push 0x1000
Run Code Online (Sandbox Code Playgroud)

如果你可以腾出一个寄存器(并且你不介意破坏标志),那么像这样的东西怎么样:

xor eax, eax
inc eax
shl eax, 12
push eax
Run Code Online (Sandbox Code Playgroud)
mov BYTE [eax],0x31
Run Code Online (Sandbox Code Playgroud)

这里的零并不是来自常量,而是来自寻址方式。尝试:

xchg eax, ecx
mov BYTE [ecx],0x31
xchg eax, ecx
Run Code Online (Sandbox Code Playgroud)