Форум программистов
 
О проблемах с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail


Ответ
 
Опции темы
Старый 23.09.2010, 13:25   #11
assch
Пользователь
 
Регистрация: 13.09.2010
Сообщений: 65
По умолчанию

Вот два экзешника которые делают снимки
Только если винда на С стоит
До и после, в принципи достаточно одного,
просто они заточены что первый как бы делает 1 снимок
второй 2 снимок (что бы файлы отчёта для сравнения были разными)

Это ссылка где обсуждаются подобные алгоритмы
http://ru.wikipedia.org/wiki/Diff
Там же есть ссылки на исходники на С#
Вот прилепил исходник программы WinDiff
Только как от туда вытащить функцию в голом виде
знаний пока не хватает
Мне не обязательно на ассемблере
на любом другом языке просто чтобы получилась функция
с 3 параметрами
1: (Вставить текстовый файл) первый файл снимка
2: (Вставить текстовый файл)второй файл снимка
3: ну и файл вывода где отобразятся все добавленные строчки(файлы)
Вложения
Тип файла: rar Snimok.rar (559.3 Кб, 9 просмотров)
Тип файла: rar WD.rar (149.3 Кб, 8 просмотров)

Последний раз редактировалось Stilet; 24.09.2010 в 06:58.
assch вне форума Ответить с цитированием
Старый 24.09.2010, 03:42   #12
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,159
По умолчанию

Цитата:
Сообщение от assch
Это нужно для того чтобы выявить изменения в файловой системе
Делаешь снимок скажем папки Program Files потом ставишь какую нибудь программу
Делаешь второй снимок Сравниваешь и получаешь список добавленных файлов
как это делает скажем ТоталЮнистал
"Начали за здравие, а кончили за упокой" тема называется "сравнить два текстовых файла", а сейчас выясняется, что требуется сравнивать содержимое папки, до и после установки какой-то программы -- немного разные вещи тебе потребовались в начале и сейчас. Кстати программа может что-либо писать в реестр, либо сохранять какой-либо файл в другой дирректории. Для сравнения содержимого папки достаточно выполнить команду dir >1.txt до dir >2.txt после и fc /b 1.txt 2.txt >3.txt для получения разницы
Mikl___ вне форума Ответить с цитированием
Старый 24.09.2010, 12:25   #13
assch
Пользователь
 
Регистрация: 13.09.2010
Сообщений: 65
По умолчанию

Читайте пожалуйста внимательно, нужно именно сравнить два текстовых файла.
Потому что именно в них заносится список файлов.
То что программа заносит изменения в другие папки, в том числе в реестр
это и так понятно, я просто папку Program Files привёл как пример.
А старая добрая функция " fc " прекрасная штука но,
увы для глобальных сравнений она не подходит
так как файл отчёта создаёт не больше 64кб (наследие досовских времён)

Последний раз редактировалось assch; 24.09.2010 в 16:02.
assch вне форума Ответить с цитированием
Старый 29.09.2010, 02:35   #14
xrnd
Пользователь
 
Регистрация: 27.09.2010
Сообщений: 18
По умолчанию

А почему Вы решили на ассемблере писать такую программу?
Врядли ассемблер сильно увеличит производительность в этом случае.

Конечно, на ассемблере можно написать всё что угодно
Можно с помощью WinAPI отобразить оба файла в память и дальше легко сравнить, записывая различия в третий файл.
xrnd вне форума Ответить с цитированием
Старый 29.09.2010, 04:07   #15
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,159
По умолчанию

xrnd
assch нужно, чтобы ему написали программу -- вот он и ждет, пока от советов перейдут к делам
Mikl___ вне форума Ответить с цитированием
Старый 29.09.2010, 07:49   #16
xrnd
Пользователь
 
Регистрация: 27.09.2010
Сообщений: 18
По умолчанию

Так не интересно
xrnd вне форума Ответить с цитированием
Старый 29.09.2010, 13:40   #17
assch
Пользователь
 
Регистрация: 13.09.2010
Сообщений: 65
По умолчанию

Код:
format PE GUI 4.0
 
include 'win32a.inc'
 
section '.text' code readable executable
entry start
start:
     invoke  CreateFile,old.name,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL
     mov     esi,eax
     invoke  GetFileSize,eax,NULL
     mov     edi,eax
     invoke  GetProcessHeap
     mov     [hHeap],eax
     mov     ebx,eax
     invoke  HeapAlloc,eax,NULL,edi
     mov     [old.address],eax
     invoke  ReadFile,esi,eax,edi,temp,NULL
     invoke  CloseHandle,esi
 
     invoke  CreateFile,new.name,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL
     mov     esi,eax
     invoke  GetFileSize,eax,NULL
     mov     edi,eax
     invoke  HeapAlloc,ebx,NULL,edi
     mov     [new.address],eax
     mov     ebx,eax
     invoke  ReadFile,esi,eax,edi,temp,NULL
     invoke  CloseHandle,esi
 
     invoke  HeapAlloc,[hHeap],NULL,edi
     mov     [result.address],eax
 
     stdcall compare,[old.address],ebx,edi,eax
 
     mov     ebx,[result.address]
     sub     eax,ebx
     mov     edi,eax
 
     invoke  CreateFile,result.name,GENERIC_WRITE,NULL,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL
     mov     esi,eax
     invoke  WriteFile,eax,ebx,edi,temp,NULL
     invoke  CloseHandle,esi
     mov     edi,[hHeap]
     xor     esi,esi
     invoke  HeapFree,edi,esi,[old.address]
     invoke  HeapFree,edi,esi,[new.address]
     invoke  HeapFree,edi,esi,ebx
 
     invoke  ExitProcess,0
 
proc compare uses esi edi ebx,file1,file2,size2,file3
     mov ecx,[size2]
     mov esi,[file1]
     mov edi,[file2]
     cld
     mov eax,0Ah
search_not_equal:
     mov edx,ecx
     repne scasb    ;search Carriage Return byte
     jne exit
 
     sub edx,ecx
     xchg edx,ecx    ;edx saves previous ecx, ecx = length of string
     mov ebx,ecx
 
     sub edi,ecx
     repe cmpsb
     xchg ecx,edx
     je search_not_equal
 
     ;if strings not equal
     sub edx,ebx
     neg edx
     sub esi,edx
     sub edi,edx
     xchg ebx,ecx
     mov edx,esi
     mov esi,edi
     mov edi,[file3]
     rep movsb
     mov [file3],edi
     mov edi,esi
     mov esi,edx
     mov ecx,ebx
     jmp search_not_equal
exit:
     mov eax,[file3]
     ret
endp
 
section '.data' data readable writeable
struc FILE name
{
   .name db name,0
   .address dd ?
}
 
hHeap dd ?
temp dd ?
old FILE 'old.txt'
new FILE 'new.txt'
result FILE 'result.txt'
 
section '.idata' import data readable writeable
library kernel32,'KERNEL32.DLL',\
    user32,'USER32.DLL'
 
include 'api\kernel32.inc'
include 'api\user32.inc'
assch вне форума Ответить с цитированием
Старый 29.09.2010, 13:41   #18
assch
Пользователь
 
Регистрация: 13.09.2010
Сообщений: 65
По умолчанию

код на Фасме
Помогли на альтернативном форуме
Только у неё есть одно из условий Чтобы в новом файле были обязательно все строчки из старого файла
Иначе алгоритм сработает не правильно Я в принципи работаю на языке Autoit и у меня есть этот алгоритм
Я тоже при разроботке этого алгоритма столкнулся с этой проблемой и сделал алгоритм так:
Первым циклом находил строчки которые (пропали в силу ряда причин) и не попали в новый файл
Вторым циклом удалял эти строчки из старого файла (как правило их не так много но время основное тратится
именно на это) Ну и третий цикл сравнение который можно корректно сделать кодом выше
Моим кодом на Autoit можно сделать сравнение например первого снимка файловой системы
и второго снимка после установки например программы Пинакл Файлы получаются весом 1.08mb и 1.76mb
Больше 20000 строк в первом ну и во втором 26000 Мой алгоритм затрачивает 2.5 секунды
Я просто хотел перекинуть свой алгоритм на ассемблер ведь он может работать не только с переменными
а и с регистрами Код выше прекрасно делает третий цикл а вот как на ассемблере сделать первые два цикла?
с ассемблером вплотную не работал поэтому и обратился к знатокам может кто нибудь и поможет

Последний раз редактировалось assch; 29.09.2010 в 14:13.
assch вне форума Ответить с цитированием
Ответ
Купить рекламу на форуме 20000 рублей в месяц

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как быстро сравнить два похожих файла? myza Microsoft Office Excel 8 26.08.2010 07:59
Сравнить два множества. Pascal MaxMelnikov Помощь студентам 3 16.03.2009 09:35
как в перле можно сравнить два файла? menik Помощь студентам 1 23.02.2009 10:16
Помогите пожалуйста сравнить два столбца ddimma Microsoft Office Excel 4 16.01.2009 09:01
Сравнить два файла Aleksandr Microsoft Office Excel 6 06.10.2008 23:22


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS