【问题标题】:strcpy misalignment __strcpy_sse2_unaligned()strcpy 未对齐 __strcpy_sse2_unaligned()
【发布时间】:2017-04-28 17:41:06
【问题描述】:

解决__strcpy_sse2_unaligned() 问题的正确方法应该是什么? IE。 strcpy(enc_buf, base64_encode(buf)); 在 gdb 中导致 __strcpy_sse2_unaligned() 那么有哪些预防措施来防止此类事情发生呢?

【问题讨论】:

  • 防止什么,究竟是什么?
  • @black 我的意思是说我们应该怎么做才能解决 gdb 输出中给出的错位问题
  • 为什么在 gdb 的 __strcpy_sse2_unaligned 中发现自己是一个问题?您究竟想防止什么?
  • 我应该解释一下strcpy必需的 不会因为对齐问题而崩溃,因为chars 不需要对齐。崩溃恰好发生在名称中带有unaligned 的函数内部,但这并不意味着任何有趣的事情。该错误可能是 enc_buf 是无效指针或 base64_encode 返回无效指针。同样,valgrind 会告诉你到底发生了什么。
  • 如果崩溃,buf 可能没有 NUL 结尾字符。也可能是 base64_encode() 返回没有 NUL 结束字符。

标签: c strcpy


【解决方案1】:

编译器无法确定您的源和目标char* 是否对齐(通常是字对齐甚至四字对齐),因此正在备份到未对齐但可能已优化的strcpy 例程。您需要明确暗示它正在做的错过的猜测;否则,它将放弃:SSE 通常不允许未对齐的访问或仍然非常慢。

但是,如果您遇到段错误,则不太可能是库问题(这是一个主要使用的函数),而且不可能是由于未对齐造成的。例如,由于缓冲区溢出,您的代码很可能在某处表现出未定义的行为。使用valgrind-fsanitize=address 检查您的指示。

【讨论】:

    猜你喜欢
    • 2018-04-17
    • 2017-04-16
    • 2015-10-10
    • 2010-11-07
    • 2012-07-23
    • 2020-12-14
    • 2012-01-09
    • 2012-10-14
    • 2017-03-06
    相关资源
    最近更新 更多