Так что мне нужно вычислить контрольную сумму 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);
}
Выводит шестнадцатеричное значение, но это определенно неверно.Я предполагаю, что это определенно не читает в файле правильно.