当前位置: 首页 > 面试题库 >

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

陆高峰
2023-03-14
问题内容

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

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

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

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


问题答案:

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


 类似资料:
  • 也许我误解了什么,但x86中的未对齐访问似乎带来了安全问题,例如返回地址完整性问题。 > 为什么x86设计器首先允许未对齐的访问?(性能是我能想到的唯一好处。) 如果x86设计人员允许这种未对齐的访问问题,他们应该知道如何解决它,不是吗?是否可以使用静态技术或清理技术检测未对齐的访问?

  • 问题内容: 我想用x86 / x86_64上禁止的未对齐内存访问来模拟系统。有一些调试工具或特殊模式可以做到这一点吗? 当使用为SPARC或其他类似CPU设计的软件(C / C ++)时,我想在几台x86 / x86_64 PC上运行许多(CPU密集型)测试。但是我对Sparc的访问受到限制。 据我所知,Sparc总是检查内存读写的对齐是否自然(从任何地址读取一个字节,但仅当地址被4整除时才读取4

  • 当目标指令集为x86/x64时,未对齐的内存读写不会导致错误的结果;而在Emscripten环境下,编译目标为asm.js与WebAssembly时,情况又各有不同。 info 这里“未对齐”的含义是:欲访问的内存地址不是欲访问的数据类型大小的整数倍。 4.2.1 asm.js C代码如下: //unaligned.cc struct ST { uint8_t c[4]; float f; }

  • 我想模拟x86/x86_64上禁止未对齐内存访问的系统。是否有一些调试工具或特殊模式来执行此操作? 当使用为SPARC或其他类似CPU设计的软件(C/C)时,我想在几台x86/x86_64PC上运行许多(CPU密集型)测试。但是我对Sparc的访问是有限的。 正如我所知,Sparc总是检查内存读写的对齐是否正常(从任何地址读取一个字节,但仅当地址可被4整除时才允许读取一个4字节的字)。 可能是Va

  • 我知道C中的未对齐访问是什么,它可能会导致某些处理器UB。 我想知道这样写在NASM汇编上的代码中是否存在同样的问题:

  • 问题内容: 我遇到一个问题,我正在提交一个包含少量数据的简单表单,当我在选项卡中检查ajax的URL似乎正常时,但是在处理了ajax之后,它会发出错误提示,并将其重定向到我的主页,并从控制台选项卡我有这个: 未捕获的异常:内存不足 在我的ajax中,我只有以下简单代码: 在我的PHP控制器中,我具有此功能 问题答案: 从您重定向到主页的描述,但是在ajax响应部分中没有执行此操作的代码,我怀疑元素