Thread View: pl.comp.lang.asm
3 messages
3 total messages
Started by gniotek
Fri, 28 Apr 2006 18:01
Okrajanie pliku exe z tabeli importow (PE format, masm32).
Author: gniotek
Date: Fri, 28 Apr 2006 18:01
Date: Fri, 28 Apr 2006 18:01
12 lines
1455 bytes
1455 bytes
Witam, Szukam mozliwosci aby maksymalnie zmniejszyc rozmiar exe`ka, uzywam masm32, ma to byc standardowa aplikacja windows, pomyslalem ze wywale mu zbedne zeczy z naglowka, ale nie wiem jak sie za to zabrac i jak kompilowac takie cudo. Prosze o pomoc fachowcow. PS. Mile widziane rownierz sugestie ogolne na temat optymalizacji pod wzgledem rozmiaru. Z gory dziekuje. Pozdrawiam.
Re: Okrajanie pliku exe z tabeli importow (PE format, masm32).
Author: Piotr Niżyński
Date: Fri, 28 Apr 2006 18:11
Date: Fri, 28 Apr 2006 18:11
17 lines
2070 bytes
2070 bytes
Utwórz wspólną sekcję kodu i danych zainicjowanych. Osobną sekcję, ale bez reprezentacji w pliku (PointerToRawData = SizeOfRawData = 0), stworzyć można dla danych niezainicjowanych. Sekcję importów pomiń -- można je ładować dynamicznie, adres powrotu z entry point leży w kernelu, maskując przez FFFFF000 i idąc w tył można dotrzeć do obrazu kernela w pamięci (rozpoznamy go po sygnaturze MZ), później znaleźć w nim LoadLibrary i GetProcAddress i załadować wszystko, co potrzeba. Ale uwaga: choć teoretycznie wystarczy schodzić strona po stronie, to jednak w takim wypadku niektóre antywirusy heurystycznie stwierdzą, że kod jest podejrzany; dlatego lepiej cofać się o 256 bajtów -- trwa to dostatecznie długo i praktycznie żadna heurystyka nie zdąży dotrzeć do momentu, w którym umieścisz w rejestrze bazę kernela. Mając LoadLibrary i GetProcAddress można już w pętli pobrać wszystkie potrzebne importy. Ogólnie pozbywanie się sekcji oszczędza do 4 KB paddingu na każdej.
Re: Okrajanie pliku exe z tabeli importow (PE format, masm32).
Author: Bogdan (bogdro)
Date: Fri, 28 Apr 2006 18:20
Date: Fri, 28 Apr 2006 18:20
38 lines
2917 bytes
2917 bytes
gniotek napisał(a): > Witam, > Szukam mozliwosci aby maksymalnie zmniejszyc rozmiar exe`ka, uzywam > masm32, ma to byc standardowa aplikacja windows, pomyslalem ze wywale > mu zbedne zeczy z naglowka, ale nie wiem jak sie za to zabrac i jak > kompilowac takie cudo. Prosze o pomoc fachowcow. Zainteresuj się np. programem "strip" (jest też wersja dla DOS/Win). Nawet jeśli niedokładnie to robi (bo tylko usuwa symbole), to można spojrzeć w źródła: ftp://ftp.delorie.com/pub/djgpp/current/v2gnu/ -> bnu2161(b,s).zip. Krąży mi po głowie nazwa 'pestrip', choć nie wiem, czy takie coś w ogóle istnieje. Na www.wotsit.org powinien być opis nagłówka PE, można wtedy zrobić tak, że piszesz po prostu binarkę typu .com, tylko na początku umieszczasz trochę bajtów, dzięki którym po skompilowaniu Windows rozpozna typ pliku i prawidłowo go uruchomi. Tak szczerze, to słyszałem, że z programem windowsowym nie da się zejść poniżej pewnej granicy. Mgliście widzę 2 liczby: albo 1536 (raczej), albo 512 bajtów. Chyba w podręczniku do FASMa pod Windows było, ale głowy nie dam. http://flatassembler.net/download.php Może można mówić linkerowi, że chce się mniejszy domyślny rozmiar sekcji, pewnie można pominąć pewne sekcje. > PS. Mile widziane rownierz sugestie ogolne na temat optymalizacji pod > wzgledem rozmiaru. Używać krótszych instrukcji, jednej zamiast kilku, argumentów 1-bajtowych zamiast 4-bajtowych (jeśli się da). To tyle na razie. Jeśli się okaże, że faktycznie dość wysoki jest próg minimalny długości programu, to takie ciekawostki powoli tracą sens. -- Pozdrawiam, Bogdan (Linux i FreeDOS) Kurs assemblera x86 (DOS i Linuks): http://rudy.mif.pg.gda.pl/~bogdro Grupy dyskusyjne o asm: pl.comp.lang.asm alt.pl.asm alt.pl.asm.win32 Prawdziwy, bezpieczny komunikator: www.JabberPL.org
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads