0
我一直試圖在shab6.x中使用SHA-256函數在FreeBSD 9.1系統上,但它似乎破壞了我的程序的內存空間,導致各種躁狂行爲。我寫了一個快速程序,只是爲了玩這些功能,仍然有問題。SHA_256函數破壞內存空間
在下面的例子,INT I當我打電話SHA256_Init()被改變時,從周圍的printf()的語句所示的輸出。
這就是我運行代碼。
$ ./miner "hello world"
i = 0
i = 32
0000000032 9010a9cf81ce2c28a642fd03ddf6da5790c65c30cd4a148c4257d3fe488bacc7
爲什麼這個值變爲32?我錯過了什麼嗎?代碼如下...
#include <sha256.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#define DIFFICULTY 0
int main(int argc, const char **argv) {
uint nonce, i, j;
SHA256_CTX ctx;
size_t arglen;
unsigned char digest[32];
char * data;
if(argc < 1) exit(1);
arglen = strlen(argv[1]);
data = malloc(arglen + 1);
char digestStr[65];
i = 0;
do {
nonce = i;
strncpy(data, argv[1], arglen + 1);
printf("i = %i\n", i);
SHA256_Init(&ctx);
printf("i = %i\n", i);
SHA256_Update(&ctx, data, arglen);
SHA256_Update(&ctx, (unsigned char *) &nonce, sizeof(nonce));
SHA256_Final(digest, &ctx);
SHA256_End(&ctx, digestStr);
printf("%010i\t%s\n", i, digestStr);
j = 0;
while(j < 32 && digest[j] == '\0') {
j++;
}
i++;
} while(j < DIFFICULTY);
free(data);
return 0;
}
「SHA_256函數」或您的代碼中的錯誤? - 我知道我的錢在哪裏...... – 2013-04-25 02:57:45
我從來沒有說過SHA265的功能是問題,只是他們似乎在破壞存儲空間。無論是因爲我把指針擰在某個地方,都是無關緊要的。它非常簡單的代碼,我在問,因爲以前使用過這些函數的人可能熟悉我不熟悉的東西,或者快速地找出我的代碼中的一些錯誤,我錯過了。顯然有些東西在這裏是錯誤的,因爲函數的工作原理和內存通常不會重寫自己......呃,除非這是一個更大的問題;) – user1842941 2013-04-25 03:16:12
我不知道是什麼原因導致你的錯誤,但你應該檢查'if argc <2)',你應該使用'%u'來''printf''uint'。 – 2013-04-25 04:39:42