6

最終的に英語の段落の形になるシェルコードを書き込もうとしています。これは、英数字または句読点に評価されるオペコードを持つ命令にほとんど制限されていることを意味します。これによりjo、実際jnoには、、、、、、、、、、、、、、および(文字に対応する)を含む多くの異なるジャンプ命令が残ります。これらの各ジャンプは、ジャンプするかどうかを決定する前にテストを実行します。ほとんどの場合、ジャンプとその逆を組み合わせて、シェルコードでジャンプが確実に行われるようにすることができます(たとえば、then 、またはthenを使用)が、の場合はこれを行うことができません。のテストjbjaejejnejbejajsjnsjpp-zjojnojejnejbjbですCF=1

私の質問は、機能的にNOPであるが、それを保証する一連の英数字命令はありますCF=1か? CFはキャリーフラグであるため、キャリーフラグを設定することが保証されている操作で十分です。

また、を確実にするためにjae、とにかく確実にするためにCF=0

4

1 に答える 1

6

「4444」を使用CFして 0に設定できます。

「44」XOR AL, 0x34

2XORsと同じ値を指定しても に変化はありませんAL

ただし、ほとんどすべての算術フラグに影響することに注意してくださいXOR(影響AFは定義されていません)。したがって、完全に「NOP」ではありません。

32 ビット モードでは、「PhohohX7X」を使用して 1 に設定できますCF

「ぴ」PUSH EAX.
「ほほ」PUSH 0x686F686F
「×」POP EAX.
「7」AAA
「×」POP EAX.

にも注意点がありAAAます。ほとんどの算術フラグに対するその影響は未定義です (例外としてCFAFそれらは等しくなります)。ですから、完全に「NOP」というわけでもありません。

于 2012-05-18T19:34:01.540 に答える