shell - 无空 Shellcode

标签 shell assembly shellcode

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

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

push 0x1000


mov BYTE [eax],0x31

我想避免使用一千个对 inc eax 的调用。我在想也许有一些创造性的异或值,第二,也许如果有一个标志来设置它只需要 8 个字节的常量。

任何帮助表示赞赏。

最佳答案

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

关于shell - 无空 Shellcode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6853945/

相关文章:

linux - 自动硬链接(hard link)文件,但只有一次

assembly - 是否可以获得GDT的地址?

c++ - "shld"指令产生奇怪的值

c - 缓冲区溢出-设置要打印的相关文本

由于目录原因,Ruby 一行失败

bash - 通过将 dirname 的结果管道化到 Bash 脚本中的 basename 来获取父目录名称

linux - 为什么 |不适用于查找?

macos - Mach-O 64 位格式不支持 32 位绝对地址。国家安全管理协会

assembly - 链接结构 LDR PEB

c++ - 将字符串转换为函数