Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Последние темы форума

Показать новые сообщения »

Почтовая рассылка

Подписчиков: 11692
Последний выпуск: 19.06.2015

CheckSumMappedFile отрабатывает некорректно

6
21 июля 2015 года
@pixo $oft
3.4K / / 20.09.2006
Пытаюсь из DLL посчитать контрольную сумму сам у себя. Делаю так:
 
Код:
HMODULE hMdl;DWORD dwHdrSum,dwChkSum;
GetModuleHandleEx(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS|GET_MODULE_HANDLE_EX_FLAG_UNCHANGED_REFCOUNT,(LPCSTR)&szVar,&hMdl);
PIMAGE_NT_HEADERS inth=ImageNtHeader(hMdl);
CheckSumMappedFile(hMdl,inth->OptionalHeader.SizeOfImage,&dwHdrSum,&dwChkSum);
В dwHdrSum и dwChkSum — разные значения. Ладно, тогда делаю так:
 
Код:
char szName[MAX_PATH];
GetModuleFileName(hMdl,szName,MAX_PATH);
HANDLE hFile=CreateFile(szName,0,FILE_SHARE_READ,0,OPEN_EXISTING,0,0);
CheckSumMappedFile(hMdl,GetFileSize(hFile,0),&dwHdrSum,&dwChkSum);
CloseHandle(hFile);
Всё равно разные!
Как правильно вызвать эту функцию, если ни размер образа в памяти, ни файла на диске ей не подходят?
6
22 июля 2015 года
@pixo $oft
3.4K / / 20.09.2006
Я почитал интернеты, подумал и понял, что всё верно — функция же весь образ в памяти пересчитывает, а там тебе и структуры заполненные, и переменные разные значения имеют. Поэтому остаётся только MapFileAndCheckSum().
285
22 июля 2015 года
sadovoya
757 / / 19.11.2005
А я так понимаю значения и могут быть разные. Видимо надо посчитанную, если отличается от старой, вписать в pe. Потом проверить и начнет сходиться само собой (до следующих изменений файла) .
Цитата:
It is recommended that all images have valid checksums. It is the caller's responsibility to place the newly computed checksum into the mapped image and update the on-disk image of the file.

Либо попросить линкер изначальную запись сделать:

Цитата:
The linker computes the original checksum at link time, if you use the appropriate linker switch. For more details, see your linker documentation.

Без этого я так понимаю изначальная запись не валидна.

P.S. На Дельфи пример перезаписи нашел тут (там-же и проверка).

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог