正在将char数组的最后8个字节设置为__uint64
Setting last 8 bytes of char array to __uint64
我正在从维基百科上的伪代码中实现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个字节。
相关文章:
- std::ifstream::read 不会读取所有 512 字节,并设置 EOF 和失败位
- 复制后删除原始数组指针将前 3 个字节设置为 0
- 是否强制转换void**并将第一个字节设置为nullptr
- 蓝牙LE:设置字节数组的特征会发送错误的值
- 如果字节中的所有位都设置为高,则设置为高字节
- 在 C++ 中立即设置故障位(在读取任何字节之前)
- 如何在没有循环的字节中设置位
- 你能为 Asio 的read_until设置字节限制吗?
- 以 C++ 为单位设置(短整型)的上下字节
- 如何在C++中设置短整型的上限和下限字节
- 如何正确设置fwrite()的大小和计数参数以编写一块字节
- 函数返回布尔值,只设置整个寄存器的1个字节
- 将 int 的所有字节设置为(无符号字符)0,保证表示零
- 如何在 Windows 中将文件大小设置为 100 字节 C++.
- C++/编译:是否可以设置VPTR(全局vtable + 2字节索引)的大小
- 如何使用 #define 语句来设置字节数组
- 如何告诉GCC通过编译器设置(不是编译指示)将结构大小边界设置为4字节?
- 设置 for 循环以循环,直到检测到空字节
- Java字节设置操作中的字节出现符号(+/-)错误
- 正在将char数组的最后8个字节设置为__uint64