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)

Obfuscator x86

Napisał bartek w kategorii Assembler, Programowanie

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)

Oferta pracy w Vatari

Napisał bartek w kategorii Praca, Reversing

Szukają kogoś, kto zna assemblera i C++ do pracy nad zabezpieczeniem oprogramowania

http://www.vatari.sk/info/praca.html

Jeśli zauważysz jakąś fajną ofertę pracy, dopisz ja do Proponowanych Tematów, a dodam ją na główną stronę.

Brak Komentarzy

Wpływ podkręcenia CPU na kod aplikacji

Napisał bartek w kategorii Artykuły, Reversing

Jest to bardzo stary artykuł z bloga Raymonda Chena, opisuje on jednak ciekawa historię wysypywania się aplikacji na instrukcji xor eax, eax co jak każdy koder assemblera wie jest praktycznie niemożliwe.

http://blogs.msdn.com/oldnewthing/archive/2005/04/12/407562.aspx

W swoim życiu spotkałem się raz z podobną sytuacją, gdzie u klienta w mojej aplikacji był wykonywany kod, który po prostu nie mógł być wykonywany, a próby reprodukcji buga spełzały na niczym.

Okazało się, że komputer klienta był podkręcony i jedyne wyjaśnienie tej sytuacji pasuje idealnie do opisywanej przez Raymonda Chena historii.

Brak Komentarzy