Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Предлагаю соревнование =) (http://forum.oszone.net/showthread.php?t=49211)

uStick 13-05-2005 02:13 323683

Предлагаю соревнование =)
 
Собственно, давайте-ка посоревнуемся в написании минимального прЫложения под Маст... под Windows ;)
Правила... или условия... хм:
1) прога должна делать следующее: показывать мессагу с произвольным текстом.
2) ссылки кидать сюда, не присылать вирей...
3) предупреждаю всех: перед запуском проверьте экзешник любимым дизассемблером на наличие всякой гадости...

ну вот и все... так как вам идея?

ПыСы
тока не бананьте мну :)

McDAK 13-05-2005 06:40 323709

uStick
А к чему такое странное соревнование? Во первых уточни, должна ли она обладать GUI или быть консольной, от этого ессно размер очень зависит? Потом, понятно, что размер будет зависеть от среды разработки, например я на ассме ее налабаю, врядли кто-то сможет написать еще короче. Потом ведь можно ехе-шник еще и упаковать. Моментов много, поэтому сформулируй условия более конкретно. Надеюсь я правильно понял - минимального в смысле размера?

Savant 13-05-2005 12:09 323775

uStick
Цитата:

Собственно, давайте-ка посоревнуемся в написании минимального прЫложения под Маст
Давайте =). Оптимизация - это моё =). Тока неизвестно в чем тут соревноваться - мин. размер файла формата PE = 1024 байт.
Цитата:

Цитата статья с msdn.microsoft.com
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. Оригинал статьи.

Примеры этих "минимальных" приложений:

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);
}


uStick 13-05-2005 17:01 323859

Вложений: 1
Хм... воть у меня уже вышло 569 байт =) писал без компилятора - ручками ;) показывает мессагу и пишет то же самое в файл...

uStick 13-05-2005 17:03 323860

McDAK
1) главное - чтобы был PE-файл минимального размера. все. ну и чтоб он работал ))
2) к чему? хм... а разве не интересно? ))

Savant 13-05-2005 17:35 323868

Вложений: 1
uStick
Цитата:

1) главное - чтобы был PE-файл минимального размера. все. ну и чтоб он работал ))

uStick 14-05-2005 01:31 323966

Вложений: 1
Savant
блин =) все испортил ))) я писал под WinXP.. тама идет ))

McDAK 14-05-2005 06:08 323990

Вложений: 1
uStick
Не идет :) , тока ошибка не 17, как у Savant, а 5.

CyberDaemon 14-05-2005 12:21 324051

Вложений: 1
uStick Идет-идет! (WINXP SP1)

[mzd] 14-05-2005 13:18 324075

У меня тоже все работает.

McDAK 14-05-2005 13:31 324079

Значит нет оптимизации под любую версию виндовса, что не удовлетворяет условиям соревнования.

Savant 14-05-2005 18:28 324176

All
Интересная ситуация. Согласно формату PE в его заголовке по смещению 0x38 находится поле Object Align, которое является
Цитата:

... выравниванием программных секций, должен быть степенью двойки между 512 и 256М включительно, так же связано с системой памяти. При использовании других значений программа не загрузится.
Следом за ним идет поле File align (0x3C):
Цитата:

фактор, используемый для выравнивания секций в программном файле. В байтовом значении указывает на границу на которую секции дополняются "0" при размещении в файле. Большое значение приводит к нерациональному использованию дискового пространства, маленькое увеличивает компактность, но и снижает скорость загрузки. Должен быть степенью двойки в диапазоне от 512 до 64К включительно. Прочие значения вызовут ошибку загрузки файла.
Но на практике оказалось возможно выставить значение выравнивания на 0x10 (1 параграф, 16 байт) при работающем файле. В результате получен EXE размером 704 байт (писан на Masm'e), меньше видимо только ручками. Еще раз круто убеждаемся, что:
Цитата:

... формат разрабатывали одни, а реализовывали его другие.
зы: а мне кажется, что uStick заслужил первое место, особенно учитывая оригинальное заполнение пустых мест в EXE () и то, что условия не учитывают запуск программы под любой версией Win. Проблема-то скорее всего в том, что ХР автоматически исправляет какие-то ошибки в структуре EXE, а Win2k (у меня он) - нет. Кто против?

Использованы материалы с http://virmaker-dos.narod.ru/sprav/pe.html

McDAK 15-05-2005 14:29 324310

Savant
Цитата:

Проблема-то скорее всего в том, что ХР автоматически исправляет какие-то ошибки в структуре EXE, а Win2k (у меня он) - нет.
Похоже это не совсем верно, все дело в том, что у меня ХР.
Цитата:

зы: а мне кажется, что uStick заслужил первое место, особенно учитывая оригинальное заполнение пустых мест в EXE
Может немного жестоко, но мне думается, что если он сам до этого допер, то безусловно заслуживает первое место, а если где-то прочитал, то можно только наградить за грамотное использование литературы и печатных материалов из И-нета.

hasherfrog 16-05-2005 09:50 324478

Чудные вы все :)
А кто сказал, что приложение именно екзешник с PE-заголовком?
А почему не
Код:

Файл a.bat
net send * Message!

Это же удовлетворяет всем требованиям из первого поста?

McDAK 16-05-2005 11:53 324513

hasherfrog
Дык вообще я просил uStick уточнить требования и он позже отписал, что:
Цитата:

главное - чтобы был PE-файл минимального размера

uStick 16-05-2005 12:07 324520

McDAK
"допер" я до этого, разбираясь с каким-то вирем... запакован он был FSG... как щас помню ;) И просто ради прикола решил попробовать написать свой упаковщик... из этого ничего не вышло, потому и начал просто "издеваться" над экзешниками... А первое место рано давать =) может кто поизворотливее меня найдется? ))

Что касается неработоспособности проги на некоторых операционках: как я говорил, писал я сие без компилера... руками... почти =) Поясню: сначала была прога, содержащяя из кода только ret. Откомпилил, взял заголовок, убрал лишние секции, затолкал таблицу импорта в секцию с кодом, ну и подправил все, что нужно. А вот "подправлял" я как раз до полной потери работоспособности... так в несколько этапов... так что оптимизировано все под мою операционку...

ПыСы
навались, народ =) надо добить хоть до 512 байт...

pva 17-05-2005 13:23 324913

Есть такой "тестирующий вирус" под дос (в винде тоже работает). Это *.com-файл, написанный на ASCII, который выдаёт сообщение на консоль и выходит. Его длина примерно 50 байт. Если сюда приделывать упаковщик, не думаю, что получится короче. Поэтому предлагаю сделать примерно следующее:
Код:

  lea eax, text
  push eax
  call some_winapi_proc
  ret

Если отлинковать без библиотек, длина кода (с данными) получится небольшой, а вот длина файла - 4096. Меньше у меня не получается

pva 17-05-2005 14:21 324934

http://www.opennet.ru/docs/FAQ/progr...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/

Savant 19-05-2005 11:16 325609

Мы не одни во вселенной :) :
http://www.wasm.ru/forum/index.php?a...ic=7047&page=0
http://forum.vingrad.ru/index.php?sh...18307&view=all

Ну и самый маленький PE - 153 байта ;) :
http://www.xakep.ru/post/21399/default.asp

uStick 20-05-2005 06:02 325857

Savant
часть прочитал :closed-to ... но чего-то не видел там самого кода =) тама вроде одни заголовки... хотя дочитать надо...

ну ничего! :butcher: я им еще покажу =) вот только завалю сессию и начну добивать этот экзешник ))

Savant 20-05-2005 09:51 325906

uStick
Цитата:

но чего-то не видел там самого кода

uStick 21-05-2005 02:56 326109

Savant
;) да я не так выразился... я о том, что тама вроде только ЗАГОЛОВКИ... а самого исполяемого кода-то нету ))) то есть прога ничего делать-то не может )) не соответствует, так сказать, условиям нашего соревнования ;)

ПыСы
а.. воть.. ввел енту прогу.. вроде есть сообщение, воть только коряво все... ну да ладно... запасусь литературой и буду дальше экспериментировать ;)

Savant 21-05-2005 14:47 326160

uStick
Цитата:

я о том, что тама вроде только ЗАГОЛОВКИ... а самого исполяемого кода-то нету )))
Статью прочитать ты явно поленился =). В общем для экономии места код и данные спрятаны в заголовки, а некоторые заголовки даже совмещены (перекрывают друг друга). Учитывая количество "не важных" полей это вполне логичное решение.
Цитата:

запасусь литературой и буду дальше экспериментировать
Только если делать все "по-честному" ничего путного точно не выйдет :(. Будет примерно 40 (MZ) + ок. 240 (PE) + 40 (Section) + код.

А вообще, странная вещь, этот PE-загрузчик...

bla 29-05-2005 09:52 328276

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;

type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

end.

bla 29-05-2005 09:53 328277

ТУПИТЕ

Savant 29-05-2005 14:46 328343

bla

банан не хочешь ? (за флуд и оскорбления)

uStick 04-06-2005 17:23 330055

Вылетел из универа... времени щас будет дофига...

ПыСы
А воть еще: помогите мну кто-нить крякнуть программулину. Есть такая игра Lineage2, есть для нее бот, l2walker.. надо крякнуть... Распаковал, все что надо нашел - осталось совсем немного, но чего-то не идет у мну... если что - в личные сообщ.


Время: 10:32.

Время: 10:32.
© OSzone.net 2001-