所以我需要计算ELF文件的CRC32校验和,而我在C方面有些挣扎。我需要弄清楚的第一件事是将数据放入校验和算法的最佳方法。如果ELF文件是任意大小,并且我试图以二进制形式读取它,那么存储该数据的最佳方法是什么,以便可以将其提供给校验和公式?谢谢。
这就是我现在的情况。
#include <stdio.h>
#include <stdint.h>
typedef uint32_t crc;
#define WIDTH (8 * sizeof(crc))
#define TOPBIT (1 << (WIDTH - 1))
#define POLYNOMIAL 0x04C11DB7
crc crc32(uint32_t const message[], int nBytes)
{
int byte;
crc remainder = 0;
for (byte = 0; byte < nBytes; ++byte)
{
remainder ^= (message[byte] << (WIDTH - 8));
uint32_t bit;
for (bit = 8; bit > 0; --bit)
{
if (remainder & TOPBIT)
{
remainder = (remainder << 1) ^ POLYNOMIAL;
}
else
{
remainder = (remainder << 1);
}
}
}
printf("%X",remainder);
return (remainder);
}
int main(int argc, char* argv[])
{
FILE *elf;
elf=fopen(argv[1],"rb");
uint32_t buffer[10000];
fread(buffer,sizeof(char),sizeof(buffer),elf);
crc32(buffer,10000);
}
它输出一个十六进制值,但是它绝对是错误的。我猜它绝对不能正确读取文件。