[2020]可靠的C++ CRC内存校验源码 huoji CRC 2020-10-23 886 次浏览 0 次点赞 ```cpp void Crc_Make_Table(bool* crc_check, UINT* crc32_table,DWORD64 len) { DebugOut("Crc 开始校验 Crc_Make_Table"); *crc_check = true; for (DWORD64 i = 0; i < len; i++) { DWORD64 crc = i; for (int j = 0; j < 8; j++) { if (crc & 1) crc = (crc >> 1) ^ 0xEDB88320; else crc >>= 1; } crc32_table[i] = crc; } DebugOut("Crc_Make_Table 结束"); } DWORD64 Calc_Crc32(unsigned int crc, char* Data, DWORD64 len, bool* crc_check, UINT* crc32_table) { crc = 0xFFFFFFFF; if (*crc_check == false) Crc_Make_Table(crc_check, crc32_table, len); for (int i = 0; i < len; i++) { crc = (crc >> 8) ^ crc32_table[(crc ^ Data[i]) & 0xff]; } return ~crc; } void get_code_sec(DWORD64 ImageBase, DWORD64* va_base, DWORD64* sec_len) { PIMAGE_DOS_HEADER pDosHeader = NULL; PIMAGE_NT_HEADERS pNtHeader = NULL; PIMAGE_SECTION_HEADER pSecHeader = NULL; pDosHeader = (PIMAGE_DOS_HEADER)ImageBase; pNtHeader = (PIMAGE_NT_HEADERS)((DWORD64)pDosHeader + pDosHeader->e_lfanew); *va_base = ImageBase + pNtHeader->OptionalHeader.BaseOfCode; *sec_len = pNtHeader->OptionalHeader.SizeOfCode; } ``` 本文由 huoji 创作,采用 知识共享署名 3.0,可自由转载、引用,但需署名作者且注明文章出处。 点赞 0
还不快抢沙发