Добрый день, прошу помощи.. задача - достаточно простая. Нужно на ассемблере написать небольшой файловый шреддер (перезапись случайными байтами файл и его удаление) чтобы невозможно было восстановить содержимое. Т.к. с давних времен у меня с этим языком не наладилось, прошу помощи. Дело важное и срочное.. Я написал все функции на Делфе (используя winAPI функции) Но мое приложение занимает 15 кило, это много ( Я прощу помощи: Программа по запуску: program.exe file [N] [-d] Где file - путь к фалу который следует переписать N - необязательный параметр, количество циклов перезаписи (по умолчанию 1) -d если указан этот ключ, то после перезаписи следует удалить файл.. Проверок на существование файлов и тд - вводить не требуется. Вот привожу свою процедурку на делфе: procedure dsfile(feledel:string; rewritecount:integer; del:boolean); var f:hfile;i, sz, j:integer;c: char; begin randomize; f:=FileOpen(feledel, $0002); sz:= Getfilesize(f,nil); if sz=-1 then begin FileClose(f); exit; end; for j:=0 to rewritecount-1 do begin for i:=0 to (sz-1) do begin c:=chr(random(200)+20); FileWrite(f,c,1); end; FileSeek(f,0,0); // writeln('Цикл ', j); end; FileClose(f); if del then deletefile(pchar(feledel)); end; Вот...ассемблер я ранее открывал, но не могу сам написать, т.к. и циклов я не знаю, и как параметры коммндной строки брать, и как файлы открывать и писать, и как генерировать случайные числа.. Благодарю за помощь!!! Контакты: асяка 7-8--78---728
че-то тут не сходится CreateFile, ReadFile/WriteFile, SetFilePosition, CloseHandle - это собсно и есть winAPI, которые используются для работы с файлом. Командная строка - GetCommandLine. Но парсить на асме будет конечно затруднительно. rdtsc - инструкция на асме, которая поможет в генерации случайного числа.
MSoft Тем более, что забивать можно не специально-случайными числами, а вообще любыми. Например чилслом 0 или, скажем 10. Тут главная сложность в том чтоб писать именно в те сектора. test555 Пишите на Цэ (без ++) ненамного хуже будет. (если вообще хуже)
нифига. у делфи есть такие штуки как CmdLine, Paramstr(#) .) и кстате есть такие штука как assign(f,FNAME) -> rewrite(f) -> write(f,generated_text) -> close(f). чачача.
Mikl___ под дос имхо проще, тк можно было легко вычислить и разрушить всю инфу относящуюся к файлу (и кластера и фат). В нтфс - не знаю. Кстати, если нужна простро утиль, а старый кремлин разве не подойдет?
Кстати, простое закрытие файла гарантирует, что винда сбросит данные на диск перед последующим его открытием на перезапись или удалением, или для надеги нужно вызывать FlushFileBuffers перед закрытием файла ? Или юзать FILE_FLAG_NO_BUFFERING или FILE_FLAG_WRITE_THROUGH...
leo, я проверял winhex-ом, перетирает. А каком кампилятор С++ взять чтобы размер приложения был мизерным?
winhex это не показатель, поскольку, во-первых, винда может подсовывать ему данные не с диска, а из файлового кэша, во-вторых, если файл сразу не удаляется, то данные разумеется в любом случае записываются на диск, но с некоторой задержкой (особенно для больших файлов рулит "ленивая запись" на диск). Поэтому вопрос в том, форсирует ли закрытие файла сброс данных из памяти на диск (как это делает FlushFileBuffers) или нет. Если нет, то при повторных перезаписях в цикле данные могут просто перетираться в памяти (файловом кэше), а на диск в итоге сбросится только последнее изменение - тогда и смысла нет в многократных проходах. Поэтому для надежности всетаки лучше перед закрытием вызывать FlushFileBuffers
test555 MCVC c -O1 или OW с кучей ключей. Иногда тот иногда тот. ОВ мне нравится больше, тк очень полезные ключи имеет и просто суперский линкер.
leo, спасибо, учел. Поставил. На данный момент скачал кампилятор паскалевский Inno Pascal 0.1.5 Есть пример записи в файл, размер приложение - 1500 байт, что мне вполне приемлемо. Нужно только все функции описывать..
Inno Pascal увы, не поддерживает if, for.... Кто-нибудь скажет где скачать MCVC?? интернет перелазил, только в одном обзоре упоминается и все ((
f:=FileOpen(feledel, $0002); Это не API. Это делфийский RTL. Это? я функцию выдрал из Сисутился. Даже пустое делфийское приложение 15 кб. (( Ладно, пока обойдусь и 20 кб приложением.