架构 ARM9。编程语言 C.
我们有一个第三方堆栈,其中一个调用采用指向内存位置的指针 (pBuffer
)。在堆栈中,他们可以自由地在传递的指针周围移动并随意访问它。不幸的是,他们偏移了传入的指针并将其传递给另一个函数,该函数试图从一个奇数/未验证的内存位置
((uint16 *)pBuffer)[index] = value;
其中 value
是 uint16
类型,index
是边界检查和索引 pBuffer
。这会导致未对齐的内存访问异常。 pBuffer
指向堆上的char *
。
如前所述,即使我们可以窥视第三方堆栈,我们也无法正式更新代码。所以我们通知提供商,他们在下一个版本中提供更新。
我想了解是否有解决此问题的方法。如何在不违反未对齐访问的情况下执行上述分配?解决此类问题的最佳方法是什么。
最佳答案
逐字节复制值。将其转换为(无符号)字符指针,然后一次复制一个字节。
这不是很漂亮,但听起来您没有很多选择。
关于c++ - 使用 C 的 ARM9 上未对齐内存访问异常的解决方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/673930/