プログラムを調べるためにgdbを使用しています。アセンブリでは、コードは次のことを行っています。
cmp $0x5, %eax
ただし、の内容を調べると、文字列として調べると次のように%eax
なり\020\343\377\377\377\177
ます。
アセンブリの$0x5とどのように\020\343\377\377\377\177
比較されますか?
cmp
eax
この場合、はの値を定数と比較しています5
。、が指す値eax
は、実際にはポインターであると思われる場合、定数とはまったく比較されません。
比較は減算によって行われます。つまり5
、の値から平均が減算され、いくつかのフラグ(ドキュメントeax
によると、CF、OF、SF、ZF、AF、およびPF )が適切に設定されます。通常、命令の後には、比較の結果に応じてさまざまなアクションを実行するために、ある種の条件付き命令(多くの場合ジャンプ)が続きます。cmp
eax
ポインタとして解釈するのではなく、の値を教えてeax
いただければ、もう少し情報を提供できるかもしれません。p $eax
またはを使用して、gdbinfo registers
での値を取得できます。eax