Blog. Just Blog

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

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

Поиск строки в памяти с использованием маски

29.09.2008 | Категория: Образ мышления: Assembler | Автор: ManHunter
Для поиска произвольной строки в блоке памяти с использованием бинарной маски я написал следующую процедуру:
  1. ; ---------------------------------------------
  2. ; Процедура поиска строки в блоке памяти
  3. ; (C) ManHunter / PCL
  4. ; ---------------------------------------------
  5. ; SRCdata - блок памяти в котором выполняется поиск
  6. ; SRCsize - размер блока в котором выполняется поиск
  7. ; PTRdata - строка для поиска
  8. ; PTRsize - длина строки для поиска
  9. ; MSKdata - бинарная маска для поиска или 0 если не используется
  10. ;
  11. ; Возврат: EAX = offset найденной строки
  12. ;          EAX = -1 если ничего не найдено
  13. ; ---------------------------------------------
  14.  
  15. proc scanmem SRCdata:dword, SRCsize:dword, PTRdata:dword,\
  16.              PTRsize:dword, MSKdata:dword
  17.  
  18.         push    esi edi ebx ecx edx
  19.  
  20.         ; Длина паттерна больше длины данных?
  21.         mov     eax,[PTRsize]
  22.         cmp     eax,[SRCsize]
  23.         ; Да, возврат -1
  24.         ja      .scanmem_not_found
  25.  
  26.         mov     esi,[SRCdata]
  27.         mov     edi,[PTRdata]
  28.         mov     edx,[MSKdata]
  29.         mov     ebx,esi
  30.         add     ebx,[SRCsize]
  31.         sub     ebx,[PTRsize]
  32. .scanmem_loop:
  33.         xor     ecx,ecx
  34. .scanmem_test_char:
  35.         or      edx,edx
  36.         jz      .scanmem_no_mask
  37.         cmp     byte [edx+ecx],0
  38.         jz      .scanmem_char_equal
  39.  
  40. .scanmem_no_mask:
  41.         mov     al,[esi+ecx]
  42.         cmp     al,[edi+ecx]
  43.         jne     .scanmem_next_pattern
  44. .scanmem_char_equal:
  45.         inc     ecx
  46.         cmp     ecx,[PTRsize]
  47.         jb      .scanmem_test_char
  48.         jmp     .scanmem_found
  49. .scanmem_next_pattern:
  50.         inc     esi
  51.         cmp     esi,ebx
  52.         jbe     .scanmem_loop
  53.  
  54. .scanmem_not_found:
  55.         ; Строка не найдена
  56.         mov     eax,-1
  57.         jmp     .scanmem_ret
  58.  
  59. .scanmem_found:
  60.         ; Строка найдена
  61.         mov     eax,esi
  62.  
  63. .scanmem_ret:
  64.         pop    edx ecx ebx edi esi
  65.  
  66.         ret
  67. endp
Пример использования процедуры:

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

Подсчет времени генерации страницы сайта

25.09.2008 | Категория: Web-мастеру и не только | Автор: ManHunter
Очевидно, что время генерации страницы - это разница от момента обработки первой строчки скрипта до момента обработки последней строчки. Для его расчета точности функции time() недостаточно, так как ее шаг равен 1 секунде. Страница же на сервере обычно генерируется за меньшее время. Если это не так, то стоит всерьез озадачиться оптимизацией вашего кода или сменой хостинг-провайдера. Для замеров более коротких интервалов времени в PHP существует функция microtime(). Она возвращает в виде строки текущее время с микросекундами, например:

0.57975400 1222376863

Значит для подсчета времени требуется получить значения microtime() в начале и конце работы скрипта и отобразить разницу между ними. Для выделения из строки числовых значений воспользуемся функцией explode().
  1. <?
  2. // Начало скрипта
  3.  
  4. // Получаем текущее время с микросекундами
  5. $mtime=explode(" ",microtime());
  6. // После выполнения команды explode() массив $mtime содержит значения:
  7. // $mtime[0] - микросекунды, $mtime[1] - секунды
  8. $tstart=$mtime[1]+$mtime[0]; // Засекаем начальное время
  9.  
  10. ...
  11. ...
  12. // Основной код скрипта
  13. ...
  14. ...
  15.  
  16. // Получаем текущее время с микросекундами
  17. $mtime=explode(" ",microtime());
  18. // Уже знакомая нам функция explode()
  19. $tend=$mtime[1]+$mtime[0]; // Засекаем конечное время
  20. // Округляем до двух знаков после запятой
  21. $totaltime=round(($tend-$tstart),2);
  22. // Результат на экран
  23. echo "Время генерации страницы: ".$totaltime." сек.";
  24.  
  25. // Конец скрипта
  26. ?>
Рабочий пример вы можете посмотреть в самом низу этого сайта.

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

Сейчас на сайте 2 гостей и 3 новостей

23.09.2008 | Категория: Web-мастеру и не только | Автор: ManHunter
Смешно звучит, правда? А ведь такие уродливые сочетания встречаются на очень многих сайтах. И если в английском языке достаточно написать что-то типа day(s), byte(s) и это будет смотреться вполне нормально, то в русском языке в конструкциях "число + слово" обязательно придется учитывать склонения. Безумные извраты типа "гостя(ей)" и "новость(ей)" я даже не рассматриваю, за такое надо лишать доступа к компьютеру навсегда.

Чтобы писать по-русски на своих сайтах я использую такую универсальную функцию:
  1. function num2word($num,$words) {
  2.   $num=$num%100;
  3.   if ($num>19) { $num=$num%10; }
  4.   switch ($num) {
  5.     case 1:  { return($words[0]); }
  6.     case 2:
  7.     case 3:
  8.     case 4:  { return($words[1]); }
  9.     default: { return($words[2]); }
  10.   }
  11. }
Параметры вызова: $num - число, $words - массив склонений нужного слова. Как формируется массив вы можете посмотреть на примерах.

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

Взлом паролей учетных записей Windows

22.09.2008 | Категория: Темная сторона Силы | Автор: ManHunter
В этой статье я расскажу о программных продуктах, предназначенных для взлома паролей учетных записей операционной системы Windows. Официально этот процесс называется "восстановление забытых или утраченных паролей", но название сути не меняет. Взлом может выполняться при загрузке со специального компакт-диска или дискеты, а также путем подбора пароля на уже запущенной системе. Первый способ наиболее предпочтителен, так как самый надежный и быстрый, но для его реализации в компьютере должен быть собственно сам CD- или FDD-привод, возможность загрузки с внешних устройств раньше чем с HDD или открытый доступ в BIOS для изменения порядка загрузки. Вход в BIOS может быть закрыт паролем. На большинстве стационарных компьютеров пароли на BIOS сбрасываются отключением на несколько секунд аккумулятора CMOS или замыканием специального джампера на материнской плате. В ноутбуках настройки могут храниться на энергонезависимой Flash-памяти, в этом случае придется признать, что фокус не удался.
Второй способ требует доступа к работающей системе чтобы извлечь необходимые данные из системных файлов, а потом длительного времени для расшифровки паролей. В двух словах, наиболее удачное решение для этих целей на сегодняшний день - программа SAMInside, больше на этом способе останавливаться не будем.
Разберем подробно все существующие программы для взлома паролей учетных записей при загрузке с компакт-дисков или дискет, а также порядок работы с ними.
Сразу предупреждаю, что если использовалось шифрование файловой системы, то после сброса пароля зашифрованные файлы могут стать недоступны! Используйте указанные программы на свой риск и только в самых крайних случаях!

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

Шашлыки на природе

21.09.2008 | Категория: Жизнь в оффлайне | Автор: ManHunter

Шашлыки на природе

Пользуясь случаем и последними теплыми днями осени, сходил с ребятами в лес на шашлыки.

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

Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2022
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.13 сек. / MySQL: 2 (0.0382 сек.) / Память: 5 Mb
Наверх