Napisał bartek w kategorii
Assembler,
Programowanie
Chciałbym serdecznie Was zaprosić na stronę domową Wojtka Muły, który zebrał na niej sporą liczbę algorytmów oraz ciekawych snippetów napisanych w assemblerze z wykorzystaniem najnowszych rozszerzeń procesora (od x86 po SSE4).
Najlepszym przykładem talentu Wojtka jest biblioteka sse2string, czyli najczęściej wykorzystywane funkcje znanej z języka C, biblioteki string.h, napisane w assemberze z wykorzystaniem rozszerzeń SSE2.
Wojtek prowadzi również bloga, gdzie można znaleźć ciekawe snippety w assemblerze, pierwszy z brzegu przykład warunkowej wymiany rejestrów:
sbb edx, edx ; part of step 2. - edx = 0xffffff if CF=1, 0x000000 otherwise
mov ecx, eax
xor ecx, ebx ; step 1
and ecx, edx ; completed step 2. - now C is 0 or (A xor B)
xor eax, ecx ; step 3
xor ebx, ecx ; step 4
Myślę, że każdy fanatyk assemblera znajdzie tam coś dla siebie.
Strona domowa — wm.ite.pl
Blog — wmula.blogspot.com
Znakomity przegląd optymalizacji wykonywanych przez kompilatory HLL, przedstawiony w formie prezentacji autorstwa Rolfa Rollesa.

Prezentacja — Binary Literacy — Static — 6 — Optimizations
Napisał bartek w kategorii
Assembler,
Programowanie,
Reversing
Pobieranie adresu EIP to jedna z ważniejszych czynności w kodzie wirusów, exe-pakerów, exploitów etc., poniższy artykuł prezentuje standardowe metody jak delta offset oraz te mniej znane na uzyskanie własnego adresu EIP.
http://corkami.blogspot.com/2010/03/si-cest-ton-corps-qui-bouge-cest-ton.html
Jeśli ktoś zna inne metody — dopiszcie się do komentarzy.
Napisał bartek w kategorii
Assembler,
ProgramowanieAlpha 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…
Napisał bartek w kategorii
Assembler,
C/C++,
ProgramowanieProjekt 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.

http://bukowski-framework.blogspot.com/
http://sourceforge.net/projects/bukowski/
Efnet #bukowski
Napisał bartek w kategorii
Assembler,
Programowanie
Artykuł 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/