0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

nop命令のオペランド

Posted at

nop命令のオペランド?

あるバイナリを逆アセしたところ、nop命令にオペランドがあることを見つけました。

nop DWORD PTR [rax+0x0]

nop命令とは、no operation命令のことであり、つまり「何もしない命令」のはずです。このオペランドは何でしょう???

chatGPTに聞いてみた

気になったのでchatGPT君に聞いてみました。
すると、次のように返してくれました。

なぜオペランド付きの nop を使用するのか?
コードアラインメントの最適化:
マルチバイトの nop 命令を使って、特定のアドレス境界にコードを揃えるために使用されます。これは、キャッシュラインやメモリアラインメントの観点から重要で、CPU のパフォーマンス向上に寄与します。
命令パディング:
特定のサイズのパディングが必要なときに、異なるバイト長の nop を挿入することで、コードのアドレスを整えることができます。例えば、1バイトの nop ではなく、5バイトの nop を使うことで命令のアラインメントを調整できます。

どうやら、一言で言ってしまえば 「コードのデータ長を都合のいいように調整するため」 らしいです。したがって、こちら側としては依然としてno operation、飛ばし読みしてかまわなそうです。

終わりに

なんか間違いがあれば教えてください。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?