Metasploit Frameworkの「NOP」が何であるかはわかりません。
Metasploit Unleashed は、「Nopsはペイロードサイズを一定に保ちます」と述べています。いくつかの質問投稿では、バッファオーバーフローについて言及しています。
Nopsがペイロードサイズを一定に保つのはなぜですか? Nopsはペイロードサイズを一定に保つために何をしますか?正確にはNopとは何ですか?頭字語?仮名?それはもっと長いものを表していますか?
「nop」はプロセスまたはデータですか? (例:nopを「実行」するか、nopを「送信」しますか?)なぜそれらを「そり」と「そり」と呼ぶのですか? (私はこれらの名前の両方が冬に丘を滑り降りることを指していると推測しています。これは、「nop」が何らかの形でデータトランザクションを何らかの方法で潤滑することを意味するようです)
http://www.offensive-security.com/metasploit-unleashed/
http://www.securitytube.net/questions/id/35
http://seclists.org/metasploit/2009/q2/125
アセンブリコードでは、 [〜#〜] nop [〜#〜] はNo OPerationの略です。これは0x90
としてx86チップで最も一般的に知られています。プロセッサがその命令をロードするとき、プロセッサは1サイクルの間何もしない(少なくとも有用です)後、レジスタを次の命令に進めます。
NOPはペイロードサイズを一定に保ちます
...他のコードで使用されていないスペースが、副作用なくプロセッサによって有効に実行可能であることを保証することにより。この " NOP sled "は、DEFCON 19 CTFの勝者 European Nopsled Team のようなユーモラスな名前のソースでもあります。
これの実際的な重要性は、書き込み命令jumpsに関係しています。ジャンプは、相対ジャンプ(現在の場所の8バイト前にメモリを読み取る)またはのいずれかです。絶対ジャンプ(位置0x874710にあるメモリを読み取ります)。絶対ジャンプでデータを移動する場合は、データへの参照をすべて再コーディングする必要があります。ある命令を別の命令に対して相対的に移動する場合は、相対ジャンプも再コーディングする必要があります。 NOPを配置すると、一連のNOPのどこかに着地するジャンプが最初の実行可能な命令に続き、プロセッサが実行を停止してソフトウェアをクラッシュさせる無効なコードを読み取るのを防ぐため、問題が単純化されます。
最も一般的には、スタックのポインターがメモリアドレスの連続範囲内のどこかを指していることがわかっている場合は、NOPで埋めてからコードを配置します。
これを確認してください シェルコード作成チュートリアル これは、NOPを使用して理解を深めるタイミングを説明しています。