2011-06-20 12 views
4

私はwikipediaの擬似コードからSHA1アルゴリズムを実装しています。char配列の最後の8バイトを__uint64に設定します

それは私がメッセージに64ビットとして元の長さに追加する必要があると言うので、私は次のことを試してみました:

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

これはnew_messageのメモリが破損します。

誰かがエラーを発見できますか?

ありがとうございます!

編集:

イエス、私はとても愚かです。 new_messageは配列の先頭を指していました。

+0

ビッグエンディアンまたはリトルエンディアンと書かれていますか? –

答えて

2

具体的には、new_messageが設定されているコードの部分を見ることなく、

バッファがアンダーフローしているように見えますが、これはおそらく&new_message[0]に先行するヒープヘッダーを混乱させます。あなたは、char[]の開始前に、あなたの__int64を物事の表情で書いています。

+0

編集>< – monoceres

+2

@monoceresを参照してください - 自分の自己評価の残忍さを尊重してあなたの質問を+1しています。誰もがそこにいました。 –

3

new_message-8 は、現在のポインタから8バイト前に戻るでしょうか?それは意図ですか? appendは最後に8バイトを追加することを意味します。 1>最後に十分なメモリ(8個の余分なバイト)があります。 2>ポインタが正しい場所(追加先)を指しています

+0

私は質問を編集しました! – monoceres

関連する問題