侧边栏壁纸
  • 累计撰写 73 篇文章
  • 累计创建 14 个标签
  • 累计收到 1 条评论

疑难杂症-(android release signal 7 (SIGBUS), code 1 (BUS_ADRALN), fault addr 0xd3d097f0)

秋山人家
2022-06-17 / 0 评论 / 0 点赞 / 302 阅读 / 406 字
温馨提示:
本文最后更新于 2022-06-17,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

产生原因

android armabi-v7a架构中存在内存对齐保护,当读取非内存对齐地址时,会发出上述中断。
ARM状态的指令长度是32位的,对操作数据起始地址为4字节对齐位置。
Thumb状态的指令长度是16位的(也可能为32位),对操作数据起始地址为4字节对齐位置?。

举例说明

unsigned char* data = (unsigned char*)malloc(16);
memset(data,0,16);
int i = 0;
for(i = 0;i<16;i++)
{
	int temp = *(data + i);
}

解决方法

使用中间变量的方式

int temp;
memcpy(&temp,data,sizeof(int));
/************/
int data_size = 12;
unsigned char* temp = NULL;
temp = malloc(data_size);
memcpy(temp,data,data_size);
0

评论区