Blog. Just Blog

Быстрый поиск

Введите фрагмент названия статьи для поиска

Как отказаться от обновления до Windows 10

10.06.2016 | Категория: Software | Автор: ManHunter

Как отказаться от обновления до Windows 10

Выбор и установка программного обеспечения на персональный компьютер - личное дело каждого пользователя. Это же относится и к переходу на новую версию операционной системы. Те, кто добровольно обновился до Windows 10, дальше могут не читать. Флаг вам в руки и обновления в систему. Я же предпочитаю оставаться на Windows 7, это мой осознанный выбор и мое личное мнение. Сама же проблема заключается даже не в наличии в природе Windows 10, а в том, насколько агрессивно Micro$oft пытается ее втюхать пользователям более ранних версий Windows. С каждой новой версией программа для обновления становится все более назойливой, в последних версиях ее даже невозможно просто закрыть. Ничуть не удивлюсь, если в один прекрасный день нафотошопленная заглавная картинка из этой статьи станет реальностью.

Читать статью целиком »
Просмотров: 4270 | Комментариев: 16

Самоудаляющийся файл

17.05.2016 | Категория: Образ мышления: Assembler | Автор: ManHunter

Самоудаляющийся файл

Небольшая, но в то же время полезная развлекуха - самоудаляющийся исполняемый файл. Во времена MS-DOS подобным фокусом никого было не удивить, там операционная система позволяла писать что угодно куда угодно, и даже удалять исполняемый файл во время его выполнения (хе-хе...). С появлением Windows вольница закончилась. Если файл запущен, то до того, как он завершит работу, ничего с ним сделать не получится. Но из этого правила есть одно исключение - так называемые пакетные или bat-файлы. Они выполняются не как самостоятельное приложение, а как набор инструкций для командного процессора, поэтому запросто могут удалять сами себя. Этим мы и воспользуемся для решения нашей задачи. Вот пример пакетного файла, который сперва пытается удалить файл по заданному пути, а затем самоуничтожается.

:loc
del "D:\Path\file.exe"
if exist "D:\Path\file.exe" goto loc
del %0

Проверка и цикл нужны для того, чтобы дождаться момента, когда файл освободится и станет доступным для ликвидации. Команда "del %0" удаляет bat-файл, в котором она выполняется, без привязки к его имени. Теперь, чтобы наш исполняемый файл самоудалялся, он должен выполнить следующие действия: получить имя и путь выполняемого файла, сформировать bat-файл, запустить его и завершить работу. bat-файл дождется окончания работы исполняемого файла, удалит его, затем удалит сам себя.

Читать статью целиком »
Просмотров: 6747 | Комментариев: 14

Как проверить соответствие файла PE-формату без запуска

01.12.2015 | Категория: Образ мышления: Assembler | Автор: ManHunter

Как проверить соответствие файла PE-формату без запуска

На форуме EXEL@B встретилась интересная тема по проверке является ли файл корректным PE-файлом, но без его запуска. Статическая проверка по типовым полям PE-заголовка не дает гарантии корректности, так как можно просто приписать к валидному заголовку кусок мусора или испортить его содержимое. Придется как минимум проверить соответствие размера файла суммарному размеру секций, а более тщательные проверки потребуют самостоятельного разбора секций импорта и экспорта, TLS, релоков и еще много чего. Проще всего доверить подобные проверки самой системе.

Читать статью целиком »
Просмотров: 4030 | Комментариев: 7

Автогенерация имени файла при наличии дублей

26.09.2015 | Категория: Образ мышления: Assembler | Автор: ManHunter
При разработке одной из своих программ передо мной встала задача сохранения файлов, но не просто так, а чтобы имя файла автоматически изменялось, если такой файл уже существует. С подобной задачей очень хорошо справляются менеджеры закачек и браузеры, в случае совпадения дополняя имя нового файла числовым индексом. В результате у меня получилась вот такая функция:
  1. ;---------------------------------------------------------------
  2. ; Функция автогенерации имени файла
  3. ;---------------------------------------------------------------
  4. ; lpOldName - указатель на проверяемое имя файла
  5. ; lpNewName - указатель на доступное имя файла
  6. ;---------------------------------------------------------------
  7. proc generate_filename lpOldName:DWORD, lpNewName:DWORD
  8.         locals
  9.             fname    dd ?
  10.             fext     dd ?
  11.             filename rb MAX_PATH
  12.             buff     rb MAX_PATH
  13.             idx      dd ?
  14.         endl
  15.  
  16.         pusha
  17.  
  18.         ; Получить полный путь к файла и указатель на имя
  19.         lea     edi,[filename]
  20.         lea     eax,[fname]
  21.         invoke  GetFullPathName,[lpOldName],MAX_PATH,edi,eax
  22.  
  23.         ; Проверить наличие файла или каталога
  24.         invoke  PathFileExists,edi
  25.         or      eax,eax
  26.         ; Файла нет, сразу вернуться
  27.         jz      .loc_use_filename
  28.  
  29.         ; Индекс для автогенерации имени файла
  30.         mov     [idx],1
  31.  
  32.         ; Поискать расширение в названии файла
  33.         invoke  lstrlen,edi
  34.         add     edi,eax
  35.         mov     [fext],edi
  36.         std
  37.         mov     ecx,edi
  38.         sub     ecx,[fname]
  39.         mov     al,'.'
  40.         repne   scasb
  41.         cld
  42.         or      ecx,ecx
  43.         jz      @f
  44.         ; Расширение найдено
  45.         inc     edi
  46.         mov     byte [edi],0
  47.         inc     edi
  48.         mov     [fext],edi
  49. @@:
  50.         ; Сгенерировать имя файла с индексом
  51.         lea     edi,[buff]
  52.         lea     ebx,[filename]
  53.         invoke  wsprintf,edi,.mask,ebx,[idx],[fext]
  54.         add     esp,20
  55.  
  56.         ; Проверить наличие файла или каталога
  57.         invoke  PathFileExists,edi
  58.         or      eax,eax
  59.         ; Файла нет, использовать это имя
  60.         jz      .loc_use_filename
  61.  
  62.         ; Следуюший номер счетчика
  63.         inc     [idx]
  64.         jmp     @b
  65.  
  66. .loc_use_filename:
  67.         ; Скопировать имя файла в буфер-приемник
  68.         invoke  lstrcpy,[lpNewName],edi
  69.  
  70.         popa
  71.         ret
  72.  
  73.         ; Маска для автогенерации имени файла
  74.         .mask   db '%s (%i).%s',0
  75. endp
Функции передаются два параметра: lpOldName - указатель на проверяемое имя файла и lpNewName - указатель на строку, куда будет записано первое из доступных имен файлов. Если дублей нет, то это будет оригинальное имя, если дубли есть, то имя файла будет дополнено числовым индексом в скобках. Например, если проверяется файл "filename.txt", а такой файл уже есть, то первое доступное имя файла будет "filename (1).txt". Если и такой файл существует, то имя будет "filename (2).txt", и так далее до первого свободного индекса в счетчике. Использование функции PathFileExists позволяет проверять наличие как файлов, так и каталогов. Формат добавляемого числового индекса задается маской, можете менять ее по своему усмотрению.

Читать статью целиком »
Просмотров: 2656 | Комментариев: 13

Отслеживание изменений в каталоге на Ассемблере

17.08.2015 | Категория: Образ мышления: Assembler | Автор: ManHunter

Отслеживание изменений в каталоге на Ассемблере

Одна из интересных задач, с которой рано или поздно сталкивается системный программист - это отслеживание изменений в определенном каталоге или на всем диске целиком. Это может быть что-то типа файлового монитора или какого-нибудь программного триггера, срабатывающего при появлении или изменении определенного файла. Не стоит забывать и борьбу со всякой хитрозакрученной шароварой, когда надо точно и быстро отследить, в какой файл записывается регистрационная информация или триальный счетчик. В этой статье я расскажу, как сделать подобный монитор изменений в каталогах на чистом Ассемблере.

Читать статью целиком »
Просмотров: 5422 | Комментариев: 10

01 ... 22 23 24 25 26 27 28 ... 36
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.07 сек. / MySQL: 3 (0.0085 сек.) / Память: 4.5 Mb
Наверх