0

私は一種の「noob」ですが、「printWeirdValue」が次のコードで「16777216」(1000000000000000000000000)を返す理由がわかりません。

section .data

    Var db 0

    WeirdValue db 0

にいるとき

section .data

    Var  dd 0

    WeirdValue db 0

右「0」を返します。

私は64ビットシステムを使用しており、コマンドを使用しています

nasm -f elf32

コードを組み立てるため。

誰かが手がかりを持っていますか?

4

2 に答える 2

4

「db」はバイトを宣言します。16777216はバイトに収まらないため、印刷関数はdwordを印刷しています(2番目の例で使用した「dd」で宣言できます)。正しい値(つまり、下位バイトが0)を出力しており、奇数を出力している理由は、アドレス[WeirdValue + 3]に、その時点で0x01を含んでいたバイトがあるためです。

編集-両方の時間で「db」を使用していることに気づきました-後者のコードは、WeirdValueを8バイトに整列された値の境界に近づけると思います。

于 2012-04-27T23:35:35.850 に答える
0

問題が解決しました。Score_Underが指摘しているように、「print WeirdValue」は、変数が1バイトであるのに、変数をダブルワードとして出力しました。理由はわかりません。変数の値を「x/b&WeirdValue」(/ b =バイト)で検査するだけです。

ご協力いただきありがとうございます ;-)。

于 2012-04-28T12:33:36.463 に答える