🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

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).
#212
Author: gniotek
Date: Fri, 28 Apr 2006 18:01
12 lines
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).
#213
Author: Piotr Niżyński
Date: Fri, 28 Apr 2006 18:11
17 lines
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).
#214
Author: Bogdan (bogdro)
Date: Fri, 28 Apr 2006 18:20
38 lines
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