Показать полную графическую версию : Предлагаю соревнование =)
Собственно, давайте-ка посоревнуемся в написании минимального прЫложения под Маст... под Windows ;)
Правила... или условия... хм:
1) прога должна делать следующее: показывать мессагу с произвольным текстом.
2) ссылки кидать сюда, не присылать вирей...
3) предупреждаю всех: перед запуском проверьте экзешник любимым дизассемблером на наличие всякой гадости...
ну вот и все... так как вам идея?
ПыСы
тока не бананьте мну :)
uStick
А к чему такое странное соревнование? Во первых уточни, должна ли она обладать GUI или быть консольной, от этого ессно размер очень зависит? Потом, понятно, что размер будет зависеть от среды разработки, например я на ассме ее налабаю, врядли кто-то сможет написать еще короче. Потом ведь можно ехе-шник еще и упаковать. Моментов много, поэтому сформулируй условия более конкретно. Надеюсь я правильно понял - минимального в смысле размера?
uStickСобственно, давайте-ка посоревнуемся в написании минимального прЫложения под Маст
Давайте =). Оптимизация - это моё =). Тока неизвестно в чем тут соревноваться - мин. размер файла формата PE = 1024 байт.
The file alignment of sections in the executable file can have a significant impact on the resulting file size. In Visual Studio 6.0, the linker defaulted to a section alignment of 4KB, unless /OPT:NOWIN98 or the /ALIGN switch was used. The Visual Studio .NET linker, while still defaulting to /OPT:WIN98, determines if the executable is below a certain size and if that is the case uses 0x200-byte alignment.Считаем: 0x200 - это 512 байт, в екзешнике минимум 2 секции (заголовок PE и секция кода) => 2*512=1024. Оригинал статьи (http://msdn.microsoft.com/msdnmag/issues/02/02/PE/default.aspx).
Примеры этих "минимальных" приложений:
FAsm 1.52
format PE GUI 4.0
include 'c:\!Backup =)\e\fasm\include\win32a.inc'
; no section defined - FAsm will automatically create .flat section for both
; code and data, and set entry point at the beginning of this section
invoke MessageBox,0,_message,_caption,MB_ICONEXCLAMATION
invoke ExitProcess,0
_message db '1024 байт,13,'Писано на FAsm''e',0
_caption db 'ЫЫЫыыыыы :D',0
; import data in the same section
data import
library kernel32,'KERNEL32.DLL',\
user32,'USER32.DLL'
import kernel32,\
ExitProcess,'ExitProcess'
import user32,\
MessageBox,'MessageBoxA'
end data
К сожалению на днях погорел мой Seagate, поэтому не имею возможности откомпилить нижеприведенный код, но точно знаю, что его размер будет тоже 1024 байт
MSVC++.NET 2002
#include "windows.h"
#pragma comment(linker,"/MERGE:.rdata=.text")
#pragma comment(linker,"/FILEALIGN:512 /SECTION:.text,EWRX /IGNORE:4078")
#pragma comment(linker,"/ENTRY:mainnn")
#pragma comment(linker,"/NODEFAULTLIB")
void mainnn(void)
{
MessageBox(0, "1024 байт\nПисано на MSVC++ 2002", "ЫЫЫыыыы :D", MB_ICONEXCLAMATION);
}
Хм... воть у меня уже вышло 569 байт =) писал без компилятора - ручками ;) показывает мессагу и пишет то же самое в файл...
McDAK
1) главное - чтобы был PE-файл минимального размера. все. ну и чтоб он работал ))
2) к чему? хм... а разве не интересно? ))
uStick
1) главное - чтобы был PE-файл минимального размера. все. ну и чтоб он работал ))
Savant
блин =) все испортил ))) я писал под WinXP.. тама идет ))
uStick
Не идет :) , тока ошибка не 17, как у Savant, а 5.
CyberDaemon
14-05-2005, 12:21
uStick Идет-идет! (WINXP SP1)
У меня тоже все работает.
Значит нет оптимизации под любую версию виндовса, что не удовлетворяет условиям соревнования.
All
Интересная ситуация. Согласно формату PE в его заголовке по смещению 0x38 находится поле Object Align, которое является
... выравниванием программных секций, должен быть степенью двойки между 512 и 256М включительно, так же связано с системой памяти. При использовании других значений программа не загрузится.
Следом за ним идет поле File align (0x3C):
фактор, используемый для выравнивания секций в программном файле. В байтовом значении указывает на границу на которую секции дополняются "0" при размещении в файле. Большое значение приводит к нерациональному использованию дискового пространства, маленькое увеличивает компактность, но и снижает скорость загрузки. Должен быть степенью двойки в диапазоне от 512 до 64К включительно. Прочие значения вызовут ошибку загрузки файла.
Но на практике оказалось возможно выставить значение выравнивания на 0x10 (1 параграф, 16 байт) при работающем файле. В результате получен EXE размером 704 байт (писан на Masm'e), меньше видимо только ручками. Еще раз круто убеждаемся, что:
... формат разрабатывали одни, а реализовывали его другие.
зы: а мне кажется, что uStick заслужил первое место, особенно учитывая оригинальное заполнение пустых мест в EXE (http://www.forum.oszone.net/images/smilies/new/crazy.gif) и то, что условия не учитывают запуск программы под любой версией Win. Проблема-то скорее всего в том, что ХР автоматически исправляет какие-то ошибки в структуре EXE, а Win2k (у меня он) - нет. Кто против?
Использованы материалы с http://virmaker-dos.narod.ru/sprav/pe.html (http://virmaker-dos.narod.ru/sprav/pe.html)
Savant
Проблема-то скорее всего в том, что ХР автоматически исправляет какие-то ошибки в структуре EXE, а Win2k (у меня он) - нет.
Похоже это не совсем верно, все дело в том, что у меня ХР.
зы: а мне кажется, что uStick заслужил первое место, особенно учитывая оригинальное заполнение пустых мест в EXE
Может немного жестоко, но мне думается, что если он сам до этого допер, то безусловно заслуживает первое место, а если где-то прочитал, то можно только наградить за грамотное использование литературы и печатных материалов из И-нета.
hasherfrog
16-05-2005, 09:50
Чудные вы все :)
А кто сказал, что приложение именно екзешник с PE-заголовком?
А почему не
Файл a.bat
net send * Message!
Это же удовлетворяет всем требованиям из первого поста?
hasherfrog
Дык вообще я просил uStick уточнить требования и он позже отписал, что:
главное - чтобы был PE-файл минимального размера
McDAK
"допер" я до этого, разбираясь с каким-то вирем... запакован он был FSG... как щас помню ;) И просто ради прикола решил попробовать написать свой упаковщик... из этого ничего не вышло, потому и начал просто "издеваться" над экзешниками... А первое место рано давать =) может кто поизворотливее меня найдется? ))
Что касается неработоспособности проги на некоторых операционках: как я говорил, писал я сие без компилера... руками... почти =) Поясню: сначала была прога, содержащяя из кода только ret. Откомпилил, взял заголовок, убрал лишние секции, затолкал таблицу импорта в секцию с кодом, ну и подправил все, что нужно. А вот "подправлял" я как раз до полной потери работоспособности... так в несколько этапов... так что оптимизировано все под мою операционку...
ПыСы
навались, народ =) надо добить хоть до 512 байт...
Есть такой "тестирующий вирус" под дос (в винде тоже работает). Это *.com-файл, написанный на ASCII, который выдаёт сообщение на консоль и выходит. Его длина примерно 50 байт. Если сюда приделывать упаковщик, не думаю, что получится короче. Поэтому предлагаю сделать примерно следующее:
lea eax, text
push eax
call some_winapi_proc
ret
Если отлинковать без библиотек, длина кода (с данными) получится небольшой, а вот длина файла - 4096. Меньше у меня не получается
http://www.opennet.ru/docs/FAQ/programming/compression-faq/part2.html
For case (b), it is of course necessary to take into account the size of the
decompressor. The problem may be restated as "What is the shortest program P
which, when executed, produces the string S?". The size of this program
is known as the Kolmogorov complexity of the string S. Some (actually most)
strings are not compressible at all, by any program: the smallest
representation of the string is the string itself. On the other hand, the
output of a pseudo-random number generator can be extremely compressible, since
it is sufficient to know the parameters and seed of the generator to reproduce
an arbitrary long sequence.
References: "An Introduction to Kolmogorov Complexity and its Applications",
Ming Li and Paul Vitanyi, 2nd edition, Springer-Verlag, ISBN 0-387-94868-6
http://www.cwi.nl/~paulv/kolmogorov.html
If you don't want to read a whole book, I recommend the excellent lecture
"Randomness & Complexity in Pure Mathematics" by G. J. Chaitin:
http://www.cs.auckland.ac.nz/CDMTCS/chaitin/ijbc.html
The decimal and binary expansions of Chaitin's number Omega are examples of
uncompressible strings. There are more papers on
http://www.cs.auckland.ac.nz/CDMTCS/chaitin/
Мы не одни во вселенной :) :
http://www.wasm.ru/forum/index.php?action=vthread&forum=4&topic=7047&page=0
http://forum.vingrad.ru/index.php?showtopic=18307&view=all
Ну и самый маленький PE - 153 байта ;) :
http://www.xakep.ru/post/21399/default.asp
Savant
часть прочитал :closed-to ... но чего-то не видел там самого кода =) тама вроде одни заголовки... хотя дочитать надо...
ну ничего! :butcher: я им еще покажу =) вот только завалю сессию и начну добивать этот экзешник ))
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.
Available in ZeroNet 1osznRoVratMCN3bFoFpR2pSV5c9z6sTC