В зависимости от того, что вам нужно для контрольной суммы, вы можете удалить заголовок COFF (где находится временная метка) или дополнительный заголовок.В последнем случае вы просто сохраняете только таблицу разделов и данные разделов (двоичное содержимое исполняемого файла).Если вы убедитесь, что ваш исходный код не изменен, а флаги компиляции и ссылки не изменены, данные раздела должны остаться прежними.Если вы хотите включить номера версий или размер кода в контрольную сумму, необходимо включить дополнительный заголовок.
Чтобы найти начало дополнительного заголовка, выполните процедуру:
- Чтение4-байтовый базовый адрес подписи от 0x3c.
- Перейти к смещению подписи.
- Смещение 20 байтов.Это начало необязательного заголовка.
- Вы должны ожидать здесь 0x10b, если это 32-битный исполняемый файл, или 0x20b, если 64-битный.
Чтобы найти начало разделаТаблица, выполните процедуру:
- Считать 4-байтовый базовый адрес подписи из 0x3c.
- Перейти к смещению подписи.
- смещение 16 байтов.
- Считайте 2-байтовый размер дополнительного заголовка здесь.
- Перейдите к дополнительному заголовку.
- Смещение байтов дополнительного размера заголовка.Это начало таблицы разделов.
- Вы должны ожидать здесь имя раздела (например, ".text", ".data" и т. Д.).
Для полной спецификацииФормат PE & COFF, скачайте это: Спецификация Microsoft PE и COFF .