一尘不染

如何捕获未对齐的内存访问?

linux

我正在开发一个宠物的开源项目,该项目实现了一些流密码算法,并且只有在ARM处理器上运行该bug时,我才遇到问题。我什至尝试在qemu下的x86中运行ARM二进制文件,但该错误并未在那里触发。

该错误的具体机制仍然难以捉摸,但是我最好的选择是相信它是由程序中未对齐的内存访问尝试引起的,这是qemu实现的,但被开发板中的真正ARM处理器默默忽略了。

因此,由于该问题很难诊断,所以我想知道是否有任何工具可以用来捕获正在运行的程序对未对齐的内存的访问,以便我可以准确地了解问题的出处。

如果进程违反了内存对齐限制,我还可以使用某种方法在我的ARM开发板上启用一些信号(可能是SIGBUS?),例如在访问未映射的内存地址时得到SIGSEGV。它正在运行Linux
2.6.32。


阅读 318

收藏
2020-06-02

共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
2020-06-02