如何捕获未对齐的内存访问?
- 2024-11-11 08:26:00
- admin 原创
- 19
问题描述:
我正在开发一个实现一些流密码算法的开源项目,但遇到了一个问题,只有当我在 ARM 处理器上运行它时才会触发该错误。我甚至尝试在 qemu 下的 x86 中运行 ARM 二进制文件,但该错误并未在那里触发。
该错误的具体机制仍然难以捉摸,但我最好相信它是由我的程序中未对齐的内存访问尝试引起的,该尝试由 qemu 实现,但却被我的开发板中真正的 ARM 处理器默默忽略了。
因此,由于问题显示很难诊断,我想知道是否有任何工具可以用来捕获正在运行的程序所进行的未对齐内存访问,以便我可以准确地看到问题发生的位置。
我还可以在 ARM 开发板上使用某种方式,如果进程违反了内存对齐限制,则发出某些信号(可能是 SIGBUS?),例如在访问未映射的内存地址时会收到 SIGSEGV。它运行的是 Linux 2.6.32。
解决方案 1:
Linux 可以为您修复或对访问发出警告。
您可以在 /proc/cpu/alignment 中启用该行为,请参阅http://www.mjmwired.net/kernel/Documentation/arm/mem_alignment了解不同值的解释。
0 - Do nothing (default behavior)
1 - Warning in kernel-log with PC and Memory-Address printed.
2 - Fixup error
3 - Warn and Fixup
4 - Send a SIGBUS to the process
5 - Send SIGBUS and output Warning
解决方案 2:
ARM Linux 维护着一个对齐处理程序异常列表,
$ cat /proc/cpu/alignment
User: 0
System: 0
Skipped: 0
Half: 0
Word: 0
DWord: 0
Multi: 0
User faults: 0 (ignored)
它只在procfs中有效,但很难想象没有procfs 的系统。处理此问题的具体代码在alignment.c中。您可以使用echo 3 > /proc/cpu/alignment
它让 Linux修复指令并提供一些dmesg
输出。通常,通过仿真处理未对齐的访问效率很低。最好纠正代码。附加调试器的信号选项应该会提供有关异常来源的一些线索。
阅读手册。;-)
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD