Blog. Just Blog

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

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

Создание выпадающего списка (Combobox)

13.11.2008 | Категория: Образ мышления: Assembler | Автор: ManHunter
Выпадающий список ComboBox описывается через ресурсы, но заполняется элементами отдельно, на этапе инициализации родительского окна. Для удобства заполнения выпадающих списков я написал и использую такой код.
  1. ; Идентификатор списка в ресурсах 
  2. ID_LIST        = 104
  3.  
  4. ; Сегмент данных
  5. section '.data' data readable writeable 
  6.  
  7. ; Элементы списка в формате ASCIIZ
  8. items   db 'item 0',0
  9.         db 'item 1',0
  10.         db 'item 2',0
  11.         db 'item 3',0
  12.         db 0           ; Признак окончания списка
  13.  
  14. CtrlID  dd ?           ; Хэндл списка
  15.  
  16. ; Сегмент кода
  17. section '.code' code readable executable
  18.         ...
  19. ; Процедура обработчика окна
  20. proc DialogProc hwnddlg,msg,wparam,lparam 
  21.         ...
  22.         ; Инициализация окна?
  23.         cmp     [msg], WM_INITDIALOG
  24.         je      wminitdialog 
  25.         ...
  26. wminitdialog:
  27.         ...
  28.         ; Заполнение списка строками
  29.         invoke  GetDlgItem,[hwnddlg],ID_LIST
  30.         mov     [CtrlID],eax
  31.         mov     esi,items    ; Указатель на список элементов
  32. fill_list:
  33.         invoke  lstrlen,esi  ; Длина строки
  34.         or      eax,eax
  35.         jz      fill_end
  36.         push    eax
  37.         ; Добавить строку в список
  38.         invoke  SendMessage, [CtrlID], CB_ADDSTRING, 0, esi
  39.         pop     eax
  40.         add     esi,eax      ; Следующий элемент списка
  41.         inc     esi
  42.         jmp     fill_list
  43. fill_end:
  44.         ; Установить пункт ID=2 дефолтным, нумерация ID начинается с 0
  45.         ; По умолчанию дефолтный первый пункт с ID=0
  46.         invoke  SendMessage, [CtrlID], CB_SETCURSEL, 2, FALSE
  47.         ...
  48.  
  49. ; Секция ресурсов
  50. section '.rsrc' resource data readable
  51.         ...
  52.         ; Определение выпадающего списка в ресурсах
  53.         ; 200 - максимальный вертикальный размер раскрываемой области списка,
  54.         ; высота самого элемента расчитывается автоматически и в ресурсах
  55.         ; изменить ее невозможно
  56.         dialogitem 'COMBOBOX', '', ID_LIST, 2, 10, 150, 200,\
  57.         WS_VISIBLE+CBS_DROPDOWNLIST+CBS_HASSTRINGS+WS_VSCROLL
  58.         ...
Более подробное описание флагов и стилей списка читайте на Microsoft Developer Network. Через сообщение CB_ADDSTRING можно в любое время динамически добавлять новые элементы к уже созданному списку, а через CB_SETCURSEL менять текущий выбранный элемент. Это удобно использовать при создании нескольких взаимосвязанных списков. Все добавляемые строки списка должны быть в формате ASCIIZ.

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

Поздравляю с Днем милиции!

10.11.2008 | Категория: Всякая всячина | Автор: ManHunter

Поздравляю с Днем милиции

Всех действующих и бывших сотрудников милиции, а особенно сотрудников подразделений специального назначения МВД, сердечно поздравляю с нашим профессиональным праздником! Желаю крепкого здоровья, счастья и мирного неба! Берегите себя!

Инженер саперного отделения ОМОН
капитан милиции - ManHunter


Просмотров: 8164 | Комментариев: 6

Преобразование строки в число

10.11.2008 | Категория: Образ мышления: Assembler | Автор: ManHunter
Для конвертирования строки в число я использую две функции. Первая предназначена для конвертирования строки десятичных цифр в число:
  1. ;----------------------------------------------------------
  2. ; На входе: указатель на строку
  3. ; На выходе: EAX = число или 0 если не получилось
  4. ;----------------------------------------------------------
  5. proc    str2dec lpStr:dword
  6.         push    ebx edx esi
  7.  
  8.         xor     eax,eax
  9.         mov     esi,[lpStr]
  10. .str2dec_loop:
  11.         movsx   ebx,byte [esi]
  12.         sub     bl,'0'
  13.         ; Для системы счисления с другим основанием замените следующую
  14.         ; строчку на cmp bl,основание_системы
  15.         cmp     bl,10
  16.         jnb     .str2dec_ret
  17.         ; Для системы счисления с другим основанием замените следующую
  18.         ; строчку на imul eax,основание_системы
  19.         imul    eax,10
  20.         add     eax,ebx
  21.         inc     esi
  22.         jmp     .str2dec_loop
  23.  
  24. .str2dec_ret:
  25.         pop     esi edx ebx
  26.         ret
  27. endp
Вторая функция похожа, но обрабатывает шестнадцатеричные цифры:

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

Отправка сообщений на ICQ из PHP-скриптов

09.11.2008 | Категория: Web-мастеру и не только | Автор: ManHunter
Для отправки сообщений на ICQ из PHP-скриптов очень удобно использовать готовый класс WebIcqPro от автора Сергея Акудовича. Этот класс может послужить основой для создания ICQ-роботов, системы оповещения о различных событиях с сайтов, удаленного администрирования через ICQ и многого другого. WebIcqPro не требует установки на сервере дополнительных компонентов и библиотек. Достаточно подключить через include сам класс в ваш PHP-скрипт и воспользоваться его методами и свойствами. Для работы WebIcqPro требуется PHP 5.2.0 и выше. Класс активно развивается и скоро будет включать в себя практически все функции протокола Oscar. Если по каким-либо причинам на сервере установлена более старая версия PHP, то можно воспользоваться облегченной версией класса WebIcqLite. В ней есть только функции отправки и получения сообщений, но обычно этого вполне достаточно. Класс неплохо документирован, все описания на русском языке, методы и свойства приведены с примерами использования. Очень хороший скрипт, пользуюсь сам и другим рекомендую.

Помните, что на сервере ICQ установлена защита от брутфорса, и при частых подключениях аккаунт блокируется на несколько десятков минут. Поэтому если для вашего проекта критично, чтобы все сообщения были отправлены, то зарегистрируйте несколько ICQ-аккаунтов и отправляйте сообщения с них по очереди или выбирая один случайным образом. Количество необходимых аккаунтов определяется опытным путем в зависимости от нагрузки.

Просмотров: 15035 | Комментариев: 16

Распаковка и расшифровка скриптов JavaScript

04.11.2008 | Категория: Темная сторона Силы | Автор: ManHunter
Эта статья - дополнение к статье про деобфускацию скриптов. Здесь будут рассмотрены основные принципы шифровки и упаковки, слабые места защит, способы ручного снятия, а также универсальные инструменты для автоматического снятия упаковщиков и навесной защиты со скриптов JavaScript. В последнее время все чаще исходный код скриптов шифруется или пакуется. Этим начали увлекаться Яндекс, DLE и другие популярные проекты, а красивые байки про "заботу о пользователях", "экономию трафика" и прочую чушь выглядят очень смешно. Что ж, если кому-то есть что скрывать, значит наша задача вывести их на чистую воду.

Начнем с теории. Из-за особенностей выполнения JavaScript все шифровщики и упаковщики, несмотря на их разнообразие, имеют всего два варианта алгоритма:
  1. var encrypted='зашифрованные данные';
  2. function decrypt(str) {
  3.   // функция расшифровки или распаковки
  4. }
  5. // Выполнить расшифрованный скрипт
  6. eval(decrypt(encrypted));
или как вариант:
  1. var encrypted='зашифрованные данные';
  2. function decrypt(str) {
  3.   // функция расшифровки или распаковки
  4. }
  5. // Вывести на экран расшифрованные данные
  6. document.write(decrypt(encrypted));
Второй способ чаще всего используется для защиты исходного html-кода страницы, а также разными троянами для внедрения в страницу вредоносного кода, например скрытого фрейма. Оба алгоритма могут комбинироваться, "навороченность" и запутанность расшифровщика может быть любой, неизменным остается только сам принцип.

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

01 ... 360 361 362 363 364 365 366 ... 369
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2023
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.12 сек. / MySQL: 2 (0.0474 сек.) / Память: 5 Mb
Наверх