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

时间:2011-06-20 19:28:31

标签: c++ visual-c++

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

它说我应该将原始长度附加到消息的64位,所以我尝试了以下内容:

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

这会使new_message的内存损坏。

有人可以发现错误吗?

谢谢!

编辑:

耶稣,我是如此愚蠢。 new_message指向我的数组的开始,难怪它崩溃了!

2 个答案:

答案 0 :(得分:3)

new_message -8- 会从当前指针返回8个字节,意图是什么? append意味着最后添加8个字节,你需要确保 1 GT;最后你有足够的内存(8个额外字节)。 2 - ;你的指针指向正确的位置(追加的位置)

答案 1 :(得分:2)

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

看起来你正在使缓冲区下溢,这会弄乱可能在&new_message[0]之前的堆头。您可以在__int64开头之前编写char[] 8个字节,看看事情。