Unz - распаковщик файлов zip и 7z, основанный на archiver.obj
-
Что то я посмотрел - unz распаковывает только один раз после запуска системы. Потом просо падает и не распаковывает
Я исправил положение поля с паролем, но выяснилась другая проблема: память поля затирается. Первые 1-4 байта.
Я проверял даже на старых дистрах - то же самое. Пароль соответственно не работает.
Кто разбирается в ассемблере, гляньте, пожалуйста.
Прилагаю тестовый архив с паролем.
Пароль 123456
Я проверял даже на старых дистрах - то же самое. Пароль соответственно не работает.
Кто разбирается в ассемблере, гляньте, пожалуйста.
Прилагаю тестовый архив с паролем.
Пароль 123456
А какой пароль для распаковки этого архива? Единицы как на скрине?Leency wrote:Прилагаю тестовый архив с паролем.
Добавил другой архив.
Пароль 123456
И обновись с SVN. Я удалил старый код, получив одобрение автора. Была задумка, которая осталась незакончена, сделать предпросмотр содержимого архива и выделение чекбоксами.
Вообще код Unz требует структуризации и чистки
Пароль 123456
И обновись с SVN. Я удалил старый код, получив одобрение автора. Была задумка, которая осталась незакончена, сделать предпросмотр содержимого архива и выделение чекбоксами.
Вообще код Unz требует структуризации и чистки
Из хаоса в космос
В общем что я смог выяснить по текстовому полю с паролем:
1) сначала текстовое поле с паролем берет текст из переменной
2) потом в это текстовое поле подставляется какое-то поле из структуры dlgInfo
3) и где-то в программе по адресу этого поля структуры dlgInfo пишутся какие-то символы, которые отображаются квадратиками
Т.е. не понятно что это за структура dlgInfo ? И не ясно в какой из функций появляются символы квадратики, возможно где-то внутри функции aPluginLoad ???
Пробовал делать что-бы текстовое поле работало само по себе а при закрытии из него пароль копировался по адресу [dlgInfo+19*4]. Квадратики пропадают, но появляется сообщение Ошибка в данных архива или неверный пароль и пароль не распаковывается. Т.е. проблема не в текстовом поле, потому что оно само по себе работает.
1) сначала текстовое поле с паролем берет текст из переменной
Code: Select all
password rb 256
Code: Select all
mov ebx,[dlgInfo]
mov eax,[ebx+19*4]
Т.е. не понятно что это за структура dlgInfo ? И не ясно в какой из функций появляются символы квадратики, возможно где-то внутри функции aPluginLoad ???
Пробовал делать что-бы текстовое поле работало само по себе а при закрытии из него пароль копировался по адресу [dlgInfo+19*4]. Квадратики пропадают, но появляется сообщение Ошибка в данных архива или неверный пароль и пароль не распаковывается. Т.е. проблема не в текстовом поле, потому что оно само по себе работает.
Картина такая: ссылка на password хранится в структуре edtPassword и в переменной forpassword. Очевидно я думал, что место хранения пароля может быть не только в password. Но это не важно. Важно то, что в коде unz я виду лишь одну запись в поле password - и это запись нулевого байта 0 - очистка строки, короче:
pushad
mov ebx,[dlgInfo] ;**
mov eax,[ebx+19*4]
mov [forpassword],eax
mov byte[eax], 0 ;здесь обнуляю строку
mov [stateDlg], 0
mcall 51,1,threadDialogBox,stackDlg
В строке ** очень интересно то, что тут в 19 dword лежит ссылка на password. Этот dlgInfo <= kfar_info_struc.DialogBox и kfar_info.DialogBox , но где используется kfar_info_struc - не вижу. А kfar_info используется плагином. В kfar нет аналогичного бага? Ну и в поле password пишет boxlib. На этом всё пока.
Отлаживать это дело надо, долго и упорно.
Spoiler:
proc DialogBox dlgInfo:dwordpushad
mov ebx,[dlgInfo] ;**
mov eax,[ebx+19*4]
mov [forpassword],eax
mov byte[eax], 0 ;здесь обнуляю строку
mov [stateDlg], 0
mcall 51,1,threadDialogBox,stackDlg
Отлаживать это дело надо, долго и упорно.
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
Should be fixed in #8900.
Great, thanks!
Из хаоса в космос
Who is online
Users browsing this forum: No registered users and 2 guests