2

プログラムを調べるためにgdbを使用しています。アセンブリでは、コードは次のことを行っています。

cmp $0x5, %eax

ただし、の内容を調べると、文字列として調べると次のように%eaxなり\020\343\377\377\377\177ます。

アセンブリの$0x5とどのように\020\343\377\377\377\177比較されますか?

4

1 に答える 1

2

cmpeaxこの場合、はの値を定数と比較しています5。、が指す値eaxは、実際にはポインターであると思われる場合、定数とはまったく比較されません。

比較は減算によって行われます。つまり5、の値から平均が減算され、いくつかのフラグ(ドキュメントeaxによると、CF、OF、SF、ZF、AF、およびPF )が適切に設定されます。通常、命令の後には、比較の結果に応じてさまざまなアクションを実行するために、ある種の条件付き命令(多くの場合ジャンプ)が続きます。cmp

eaxポインタとして解釈するのではなく、の値を教えてeaxいただければ、もう少し情報を提供できるかもしれません。p $eaxまたはを使用して、gdbinfo registersでの値を取得できます。eax

于 2012-01-22T22:28:58.970 に答える