关于ARM二进制的对齐问题

时间:2011-06-29 07:44:13

标签: c arm alignment

在这里,我又回到了困惑的心灵! :)

据我所知,armcc通常的数据对齐方式如下(取自ARM网站) ARM Compiler toolchain Using the Compiler: Types of data alignment

但在我的二进制文件中,我看到print_quality {}结构实例位于0x205B387

[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

1 个答案:

答案 0 :(得分:2)

根据我的经验,这通常是因为从一个东西转换到另一个东西(例如,使用字节对齐的数组并将结构复制到其中,我自己很多次犯了这个错误)。我不确定你是否可以在没有实际显示代码的情况下得到任何确定的答案,但是如果你在执行路径的某处有void*,或者memcpy那将是罪魁祸首。