ELF文件的CRC32?任意长度?

时间:2018-10-20 02:34:13

标签: c checksum crc crc32

所以我需要计算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);
}

它输出一个十六进制值,但是它绝对是错误的。我猜它绝对不能正确读取文件。

0 个答案:

没有答案