Alpha blending dla Delphi (MMX)

Napisał bartek w kategorii Assembler, Programowanie
, ,

Alpha blending dla Delphi w assemblerze z wykorzystaniem MMX:

function AlphaBlend(Pixel: dword; Background: dword; Alpha: byte): dword;
begin
 
  asm
 
  movzx       eax,Alpha       // kanal alfa 0-255
  imul        eax,01010101h   // 000000xx = xx xx xx xx
  movd        mm6,eax         //
  pxor        mm7,mm7         //
  punpcklbw   mm6,mm7         // rozpakuj do bajtow
 
  mov         edx,00FFFFFFh
  movd        mm2,edx
 
  movd        mm0,Background  // pixel z tla
  pand        mm0,mm2         // usun kanal alfa z tla
 
  movd        mm1,Pixel       // pixel obrazu
  pand        mm1,mm2         // usun kanal alfa z pixela
 
  punpcklbw   mm0,mm7         // rozpakuj pixel obrazu do bajtow
  punpcklbw   mm1,mm7         // oraz pixel litery do bajtow
 
  psubw       mm0,mm1         // src - pix
  pmullw      mm0,mm6         // *alpha
  psrlw       mm0,8           // >> 8
  paddb       mm0,mm1         // +
 
  packuswb    mm0,mm7         // spakuj ponownie do pixela
  movd        eax,mm0         // zapisz do eax
 
  mov         Result,eax
 
  end;
 
end;

To tylko przykład, można to zoptymalizować pod względem konwencji regcall, ale już mi się nie chcę, z dedykacją dla jednego geniusza, który twierdził, że to niemożliwe…

Komentarze (6)

Project Bukowski

Napisał bartek w kategorii Assembler, C/C++, Programowanie
, ,

Projekt metamorficznego silnika do mutacji kodu x86 dla plików wykonywalnych w formacie ELF. Nowatorskie podejście (w porównaniu z silnikami np. MetaPHOR) do analizy kodu, dobra dokumentacja i kompletny kod źródłowy.

nop-cavity-infection-fully-functional

http://bukowski-framework.blogspot.com/

http://sourceforge.net/projects/bukowski/

Efnet #bukowski

Brak Komentarzy

Optymalizacja kodu

Napisał bartek w kategorii Assembler, Programowanie

binaryArtykuł prezentujący różnice w optymalizacji kodu przez najpopularniejsze kompilatory HLL, cała masa ciekawych snippetów i trików używanych do wyprodukowania optymalnego kodu (również odpowiada na odwieczne pytanie czym zerować rejestry sub-em, xor-em czy inaczej), polecam prawdziwym fanatykom assemblera :)

linux-kongress.org/…/compiler_survey_felix_von_leitner.pdf

Przy okazji polecam również ciekawy artykuł autorstwa Gynvaela Coldwinda o branchless code, czyli w skrócie jak pozbyć się z kodu skoków i zastąpić je inną serią instrukcji:

http://gynvael.coldwind.pl/?id=247

Gynvael opisał wszystko na poziomie HLL, więcej przykładów w assemblerze zaprezentował kilka lat temu virii writer z0mbie w artykule Polymorphic Games:

http://vx.netlux.org/lib/vzo43.html

Przy okazji na blogu Gynvaela znalazłem odnośniki do podobnego artykułu:

http://fanael.wordpress.com/…/jak-pisac-branchless-code-czesc-1/

http://fanael.wordpress.com/…/branchless-clamp-to-0-255/

Komentarz (1)

EasyHook v2.0

Napisał bartek w kategorii Assembler, C#, Programowanie, Reversing
, ,

Ciekawa biblioteka hookująca, pozwalająca na tworzenie hooków z poziomu języków programowania z rodziny .NET dla natywnych aplikacji.

Przykłady oraz jej kody źródłowe na stronie:
http://www.codeplex.com/easyhook/

Brak Komentarzy

Obfuscator x86

Szaleństwo – jakby to napisali w reklamie Media Markt (tyle, że bez Michała Wiśniewskiego, bo odmówił udziału w tej promocji), rozdają za darmo kody do Obfuscatora kodu x86, który z twojego kodu wykrywanego przez wszystkie antywirusy zrobi sieczkę nie do rozpoznania nawet przez MksVira :)

http://www.pelock.com/products/obfuscator

Tak wygląda kod po jego zaciemnieniu:

Obfuscated

Każdy kto chce otrzymać promocyjny pakiet w wysokości 123 darmowych kredytów proszony jest o kontakt z redakcją i podanie jednego powodu, dla którego chce zamotać swój kod w assemblerze.

Komentarze (6)

CodePad

Napisał bartek w kategorii Programowanie

Ciekawa stronka, na której można wkleić kod źródłowy m.in. w C/C++ i paru innych językach, skompilować i uruchomić go po stronie serwera, a następnie wyświetlić wyniki bezpośrednio w przeglądarce:

http://codepad.org/

Brak Komentarzy