Установка последних 8 байтов массива char в __uint64 - PullRequest
4 голосов
/ 20 июня 2011

Я реализую алгоритм SHA1 из псевдокода в Википедии.

Он говорит, что я должен добавить к сообщению исходную длину как 64 бита, поэтому я попробовал следующее:

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

Это делает память new_message поврежденной.

Может ли кто-нибудь заметить ошибку?

Спасибо!

Редактировать:

Господи, я так глуп,new_message указывает на начало моего массива, не удивительно, что он разбился!

Ответы [ 2 ]

3 голосов
/ 20 июня 2011

new_message-8 вернется на 8 байт от текущего указателя, это так?добавление означает добавление 8 байтов в конце, вам нужно убедиться, что 1> у вас достаточно памяти (8 дополнительных байтов) в конце.2> ваш указатель указывает на правильное место (куда добавить)

2 голосов
/ 20 июня 2011

Не окончательно, не видя ту часть кода, которая показывает, на что установлена ​​new_message.

Похоже, что вы переполняете буфер, что испортит заголовок кучи, который, вероятно, предшествует &new_message[0]. Вы пишете свои __int64 8 байт до начала char[], судя по всему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...