CRC32 файла ELF?Произвольная длина? - PullRequest
0 голосов
/ 20 октября 2018

Так что мне нужно вычислить контрольную сумму CRC32 для файла ELF, и я просто немного борюсь с Си.Первое, что мне нужно выяснить, это лучший способ получить данные в алгоритм контрольной суммы.Если файл 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);
}

Выводит шестнадцатеричное значение, но это определенно неверно.Я предполагаю, что это определенно не читает в файле правильно.

...