1

gdb を使用して、x86 アセンブリでプログラムをデバッグしています。私はいくつかの変数の奇妙な振る舞いをしていますが、その理由を理解できません。

これが私がそれらを定義して表示する方法です:

section .data
CountDied: dd 0000
OnesFound: db 00

section .text
global _start
_start:
nop
... code

gdb を段階的に実行すると、変数が最初の命令で正しい値を持っているかどうかを確認すると、次のようになります。

print CountDied
$1=0
print OnesFound
$2=167772672

ただし、次の手順では、OnesFound は正しい方法で動作するようです。本当に困惑しています。ご提案いただきありがとうございます。

4

1 に答える 1

4

アセンブリの「変数」は、メモリ内の特定のポイントの単なるラベルです。GDB は、それがどのくらいの大きさであるかを認識していません。32 ビット値であると想定しているだけです。

取得している数値の 16 進数表現は 0x0A000200 です。x86 はリトルエンディアン プラットフォームであるため、実際には としてメモリに格納されます00 02 00 0A。最初のバイトのみが実際に設定した値の一部であり、正しく設定されています。

x/b &OnesFoundprint を使用する代わりに、コマンドを使用して、必要な特定のバイトだけを表示できます。

于 2012-09-17T13:32:17.547 に答える