我正在尝试将我编写的汇编程序转换为null-free shellcode。
但是,我不确定如何针对某些说明进行此操作。 其中一些(英特尔语法)包括:
push 0x1000
和
mov BYTE [eax],0x31
我想避免使用一千次调用inc eax。我想的也许是带有xoring值的创意,而对于第二种,也许如果有一个标志设置使它只需要8个字节的常量。
感谢任何帮助。
答案 0 :(得分:2)
push 0x1000
如果你可以备用一个寄存器(并且你不介意破坏标志),那么如下:
xor eax, eax
inc eax
shl eax, 12
push eax
mov BYTE [eax],0x31
这里的零不是来自常数,而是来自寻址模式。尝试:
xchg eax, ecx
mov BYTE [ecx],0x31
xchg eax, ecx