Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
-Raziel-
1 / 1 / 0
Регистрация: 16.05.2012
Сообщений: 11
1

VirtualAlloc + ReadFile

16.05.2012, 12:52. Просмотров 916. Ответов 7
Метки нет (Все метки)

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
INVOKE CreateFile,OFFSET fname, GENERIC_READ, NULL, NULL, OPEN_EXISTING, NULL,NULL
        mov HWNDFILE, eax
        
    invoke GetFileSize,HWNDFILE,NULL
    mov    size1,eax    
    
    invoke VirtualAlloc,0,size1,MEM_COMMIT,PAGE_READWRITE
    mov    mem,eax
    
    INVOKE ReadFile,HWNDFILE, mem, size1, OFFSET  LenBuf, NULL
        push ebx 
        push ecx 
        push edx 
        push esi
        mov     edx,-1    ; Начальное значение CRC32
        mov     esi, OFFSET mem     ; Указатель на блок данных
        mov     ecx, LenBuf      ; Длина блока
        xor     eax,eax
calc_crc32:
        ; Получить следующий символ строки
        lodsb
        ; Скопировать текущее значение CRC32
        mov     ebx,edx
        and     ebx,0FFh
        ; XOR с текущим символом блока данных
        xor     bl,al
        ; Вычисление смещения нужного dword в таблице
        shl     ebx,2
        shr     edx,8
        and     edx,0FFFFFFh
        ; XOR CRC32 со значением из таблицы
        xor     edx,ds:[crc32table+ebx]
        ; Перейти к следующему символу
        loop    calc_crc32
        ; В регистре EAX записана CRC32 строки
        mov     eax,edx
        xor     eax,-1
        mov [Buf],eax
        ; Если дальнейшая обработка не требуется, то проXORить CRC32
        ; для завершения расчетов
        ; Восстановить измененные регистры
qwe:
        pop esi
        pop edx
        pop ecx
        pop ebx
        ;Вытаскиваем из стека
        mov eax, [Buf]
        invoke  wsprintf,offset Buf,offset mask1,eax
        INVOKE SendMessage,HWNDEDT2,WM_SETTEXT,0,offset mem
        INVOKE CloseHandle,HWNDFILE
День добрый господа прошу ткнуть меня носом в ошибку)) чувствую, что ошибка при чтении файла, но вроде бы сделал все правильно, алгоритм crc точно рабочий ибо он был отлажен когда была необходимость сделать crc строки, а не файла.

createfile отрабатывает вроде бы нормально, как GetFileSize и VirtualAlloc, однако readfile что то не то показывает по идеи в LenBuf попадает число символов в файле я прав? в переменную mem попадает собственно наш файл?

Если, читать файл просто в переменную заранее определенную то все пашет но проблема в том что если скормить 100 мегабайтный файл то выдает совсем не правильный crc по тому и пребег к выделению памяти.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.05.2012, 12:52
Ответы с готовыми решениями:

VirtualAlloc + ReadFile
Пользуюсь masm32 и функциями WINAPI. Хочу подгрузить файл в память выделенную...

Вылетает из ReadFile
Всем Доброго Времени Суток! Похожую (но не аналогичную, у меня там всё ОК)...

ReadFile не пишет в буффер
ReadFile не читает файл с ошибкой ERROR_NOACCESS. Я так понимаю что проблема в...

Отладка работы функции ReadFile для обработки bmp изображений
Господа, пишу программу для обработки bmp изображений. Столкнулся с проблемой,...

VirtualAlloc
Народ,подскажите кто знает.Разбираюсь с фун VirtualAlloc();Работа с участком...

7
Vadimych
635 / 478 / 12
Регистрация: 10.01.2011
Сообщений: 1,047
16.05.2012, 13:14 2
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от -Raziel- Посмотреть сообщение
mov esi, OFFSET mem ; Указатель на блок данных
Попробуйте
Assembler
1
mov esi,mem
авось поможет.
3
-Raziel-
1 / 1 / 0
Регистрация: 16.05.2012
Сообщений: 11
16.05.2012, 14:37  [ТС] 3
Благодарю, но мое невежество меня поражает, я пробовал такой вариант, но при этом у другой переменной дописывал offset по тому и не работало(

Вопрос конечно не уместен но все же задам, можно ли оптимизировать данный алгоритм, а то как то долго делает crc для файла размером в 300 метров, почти 10 секунд
0
programmisto
92 / 137 / 0
Регистрация: 15.04.2012
Сообщений: 1,032
16.05.2012, 14:38 4
-Raziel-, нет, не слушай их. С этой строкой у тебя все правильно.
0
-Raziel-
1 / 1 / 0
Регистрация: 16.05.2012
Сообщений: 11
16.05.2012, 15:23  [ТС] 5
programmisto, как ни странно после исправления все заработало
1
vital792
1999 / 1271 / 60
Регистрация: 05.06.2010
Сообщений: 2,213
16.05.2012, 15:45 6
Цитата Сообщение от -Raziel- Посмотреть сообщение
как ни странно после исправления все заработало
ничего странного. VirtualAlloc возвращает указатель на буфер. Его и надо помещать в esi
1
-Raziel-
1 / 1 / 0
Регистрация: 16.05.2012
Сообщений: 11
16.05.2012, 15:53  [ТС] 7
vital792, ну тогда не странно согласен, видимо просмотрел слово pointer когда читал описание, и это меня подставило.

а не у кого нет соображений по поводу улучшения алгоритма какую функцию заюзать чтобы быстрее работал?
0
Somebody
2799 / 1610 / 251
Регистрация: 03.12.2007
Сообщений: 4,213
Завершенные тесты: 3
16.05.2012, 19:05 8
Цитата Сообщение от -Raziel- Посмотреть сообщение
Вопрос конечно не уместен но все же задам, можно ли оптимизировать данный алгоритм, а то как то долго делает crc для файла размером в 300 метров, почти 10 секунд
300 метров просто читаются с винчестера почти 10 секунд. Попробуй скопируй этот файл на другой диск и замерь время.
0
16.05.2012, 19:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.05.2012, 19:05

VirtualAlloc и VirtualProtect?
VirtualAlloc и VirtualProtect что из себя представляют даные функцыи,как с ними...

Работа с VirtualAlloc
ребята, здравствуйте, очень нужна ваша помощь:) мне необходимо в учебных...

VirtualAlloc и размеры
Друзья возник вопрос, кто обладает информацией, пожалуйста, поделитесь, в MSDN...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru