使用AES指令级为AES加密32位程序错误

使用AES指令级为AES加密32位程序错误

在使用AES指令集为AES加密加速的时候我使用了VisualStudio 2022 C++进行开发,在编译为64位程序时没有问题,但是在编译为32位程序时执行_mm_loadu_si128_mm_aeskeygenassist_si128等相关函数时有概率发生崩溃

img

这段代码来自于Intel的官方文档,且在Debug x64、Release x64、Release x86中均没有问题,在Debug x32中如果使用volatile关键字修饰相关函数会导致错误位置改变
根据微软提供的文档,这些函数在x86架构下也应该能够使用

在x86模式下使用SSE指令集时,一个最常见的问题是关于内存对齐的。_mm_loadu_si128 函数这里的“u”表示未对齐(Unaligned),它允许从任何地址加载128位数值,无论该地址是否16字节对齐,并不会因为边界问题崩溃。然而,在某些情况下,未对齐读取可能导致性能降低。

但根据你分享的信息和图片看来,应该不只是简单地未对其数据引起了错误;拷贝回寄存器或提供空间应该可以解决此类类型常规操作.

由于我们没有具体代码以及更详细环境配置请与我核实以下几点:

  1. 确保你正在正确使用AES指令集函数。例如 , _mm_aeskeygenassist_si128 需要两个参数: 一个__m128i 类型变量和一轮秘钥所需即将用到imm8 常数。
  2. 检查是否有试图向这些函数传递非法值或者超出预期范围结果。
  3. 谨慎处理线程安全相关内容并防止同时间多处写入相识资源
  4. 如果完全按照Intel官方文档没发现语法等明显问题,那就需要注意检查是否本身程序设计存在运行时随机性bug如动态预料申请/释放失当造成数据碰撞

以上都只是一些建议思路供参考,如果觉得还是不能确定源头,请尝试把异常产生点去确认软硬件兼容行确保编译环境稳定;也欢迎您提供更多有助分析解决问题元素希望能进一步协助您站栈相关类型调试挖掘工作.