字母数字Shellcode确保跳转

cyt*_*nus 6 x86 assembly shellcode

我正在尝试编写一些最终将采用英文段落形式的shellcode.这意味着我主要限于具有评估字母数字字符或标点符号的操作码的指令.这实际上给我留下了许多不同的跳转指令包括:jo,jno,jb,jae,je,jne,jbe,ja,js,jns,和jp(对应于字母p-z).这些跳转中的每一个在决定跳跃之前都会执行测试.在大多数情况下,我可以组合一个跳跃加上它的反转以确保在shellcode中发生跳转(例如使用jothen jno,或者je然后jne),但是我不能这样做jb.测试jbCF=1.

我的问题是,是否有任何一系列的字母数字指令在功能上是一个NOP,但也确保了CF=1CF是进位标志,因此任何保证设置进位标志的操作都足够了.

另外要保证一个jae,反正是要保证的CF=0吗?

Ale*_*nze 6

您可以使用"4444"设置CF为0.

"44"XOR AL, 0x34.

2 XORs具有相同的值结果没有变化AL.

但应该注意,它XOR几乎影响所有算术标志(效果AF未定义).所以,它不是完全"NOP".

在32位模式下,您可以使用"PhohohX7X"设置CF为1.

"P"PUSH EAX.
"hohoh"PUSH 0x686F686F.
"X"POP EAX.
"7"AAA.
"X"POP EAX.

还有一个警告AAA.它的大部分运算标记的影响是不确定的(CFAF除外,它们相等).所以,它也不是完全"NOP".