正在将char数组的最后8个字节设置为__uint64

Setting last 8 bytes of char array to __uint64

本文关键字:字节 设置 8个 uint64 最后 char 数组      更新时间:2023-10-16

我正在从维基百科上的伪代码中实现SHA1算法。

它说我应该将原始长度作为64位附加到消息中,所以我尝试了以下操作:

// new_message is of type char[] and is 9+ bytes long
*((__int64*)(new_message-8)) = (__int64) length;

这会导致new_message的内存损坏。

有人能发现错误吗?

谢谢!

编辑:

天啊,我太笨了。new_message指向我的数组的开头,难怪它崩溃了!

新消息-8将从当前指针返回8个字节,这是目的吗?append意味着在末尾添加8个字节,您需要确保1> 最后您有足够的内存(额外的8个字节)。2> 您的指针指向正确的位置(要附加的位置)

不确定,没有看到代码中显示new_message设置为什么的部分。

不过,看起来您正在对缓冲区进行下溢,这将弄乱可能位于&new_message[0]之前的堆头。从外观上看,您在char[]开始之前写入__int64 8个字节。