ここで私は混乱した心に戻ってきました! :)ARMバイナリのアライメントに関する質問
Iは、armccをすることにより、データの通常の配置を理解していたとしては、(ARM部位から採取された)次のようになり ARM Compiler toolchain Using the Compiler: Types of data alignment
しかし、私のバイナリIは0x205B387
に常駐print_quality {}構造のインスタンスを参照[D:0x205B387] print_quality =((0x44の、0x72、の0x61、は0x66、0x74、0x0の、0x0の、0x0の、0
ここではsizeof(print_quality)= 0x1Eを
構造体 char print_quality [] [10] = { "ドラフト"、 "ノーマル"、 "ハイ" };
以降、私はクラッシュを取得していますフローの
LDRHのR2を実行している間、[R1]。ここでは、r1 = 02064769
だから私は誤って整列されたアドレスからの読み取りのためにクラッシュすると思います!
何が問題になりますか。 :( 任意の考えは歓迎されている。..
BR、
/MS私の経験から
もう少しコンテキストを追加できますか?ここでの形成は、あなたの質問に答えるには十分ではありません。例えば、あなたの 'print_quality'構造体はどのように定義されていますか?あなたが言及した 'ldrh'命令にコンパイルされているCコードは何ですか? –
申し訳ありませんクラッシュは別の理由で発生する可能性があります。しかし、私が困惑しているのは、サイズが30バイトであるにもかかわらず、奇妙なアドレスに存在するprint_qualityです。 –
okマーティンは構造を追加し、答えも得ました。奇妙なアドレスに住んでいることを正当化することができます! :)私たちはldrhでクラッシュを無視することができます。私はそれが配列境界を越えるポインタだと思う。 c線は、(; * p!= 0; ++ p) の場合、\t \tです。 –