Форум: "Основная";
Текущий архив: 2004.09.05;
Скачать: [xml.tar.bz2];
ВнизКак написать маленькую программу? Найти похожие ветки
← →
Скромный инкогнито (2004-08-20 20:00) [0]Подскажите, ув. мастера, какой модуль мне использовать, чтобы написать программу для работы с реестром без графического интерфейса. Пробывал winAPI - 14.5 kb, KOL -тоже самое. Может есть модуль, делающий программу еще меньше. Например где-то видел исходники трояна, так он вообще 7 кб весил... Или такого не бывает?
← →
Mim1 © (2004-08-20 20:06) [1]Вам надо писать на асемблере. Delphi даже с асемблерными вставками вам не поможет.
← →
Fay © (2004-08-20 20:12) [2]2 Скромный инкогнито (20.08.04 20:00)
Напиши программу, которая вАщЕ нИчЁ не делает. Посмотри размер. Подумай об этом 8).
← →
Anatoly Podgoretsky © (2004-08-20 20:13) [3]А ты что троян пишешь?
← →
Андрей Сенченко © (2004-08-20 20:22) [4]
program Project1;
begin
end.
Дает 8162 Кб. Стандартны компилятор 6-го Дельфи.
... думаю сижу :)
← →
Fay © (2004-08-20 21:02) [5]2 Андрей Сенченко © (20.08.04 20:22) [4]
program Project1;
begin
end.
delphi7 - 13.5 кб. 8)
← →
Gero © (2004-08-20 23:23) [6]program Project1;
begin
end.
Размер - 1,59 кб.
P.S. TP 7.0 ;)
← →
начинающий © (2004-08-20 23:29) [7]Ассемблер: C3 (ret) - 1 байт :)
← →
VMcL © (2004-08-21 00:56) [8]>>Gero © (20.08.04 23:23) [6]
>>начинающий © (20.08.04 23:29) [7]
Напоминаю: форум по Delphi :-)
>>Андрей Сенченко © (20.08.04 20:22) [4]
>Дает 8162 Кб.
Ни себе хрена! А у меня на D6 8192 байта :-)
А если еще и заUPXить, то ваще 5120 байт. Вот.
← →
Gero © (2004-08-21 01:00) [9]Эй, консерваторы, у кого Delphi 1, сообщите свои результаты! :)
← →
AlexZ (2004-08-21 01:29) [10]Скромный инкогнито, я тут уже имел неосорожность сказать, что на Делфи нельзя получить компактный и быстрый код, и были люди, готовые поспорить, однако факт есть факт. Всё дело в компиляиторе.
Я всё чаще и чаще вижу такие воросы. Да и сам когда-то задавал... Пробовал KOL - это супер для визуальных программ. WinAPI тоже было... Но Апи в делфе - это немного изврат... Вывод: Ассемблер никгда не помешает. Так что никаким боком делфи и минимальное приложение не связаны. Делфи - это быстрота разработки и красота высокоуровневого языка.
← →
Скромный инкогнито (2004-08-21 10:39) [11]А на чём можно написать assembler код. В смысле есть специальный программы для этого?
← →
AlexZ (2004-08-21 15:29) [12]Скромный инкогнито, ассемблерный код можно написать даже в Блокноте (я так и делаю). Есть ещё разные IDE для ассемблера, такие, как RadAsm, AsmEdit... В итоге этот текстовый файл компилируется, получается объектный файл. Затем, программой-компоновщиком (Линкер, в просторечии), объединяются объектные файлы с.., к примеру, файлом ресурсов, ну или просто, между собой. И на выходе свежий exe/com/dll/drv файл (всё зависит от настроек). Наиболее распространённый Ассемблер (Асм, проще говоря) - это MASM и TASM.
Хм.. я вижу, Вы представляете перспективы ассемблера...
← →
Скромный инкогнито (2004-08-21 21:43) [13]AlexZ, спасибо
← →
Юрий Зотов © (2004-08-22 07:59) [14]> AlexZ (21.08.04 01:29) [10]
> на Делфи нельзя получить компактный и быстрый код
Смотря, что считать компактным и быстрым кодом. Ясное дело, что самый компактный и самый быстрый код всегда даст ассемблер, но разве корректно сравнивать высокоуровневый и низкоуровневый подходы? Нет, конечно. Сравнивать можно языки (компиляторы) одинаковых категорий - скажем, Delphi и С. И в этом плане Ваше утверждение выглядит весьма и весьма спорно.
> Но Апи в делфе - это немного изврат...
Почему? Вызов функций API в C-программе - это изврат? А вызов функций API в Asm-программе - это изврат? Так почему же вызов тех же самых функций в Pascal-программе (или в Fortran-программе, или в какой угодно другой программе) Вы считаете извратом? Довольно сложно понять, чем один CALL отличается от другого.
← →
kaZaNoVa (2004-08-22 09:11) [15]я писал прогу для скачивания из сети файла на делфе и ассамблере:
на делфе после сжатия около 3696 б - имхо неплохо, но на асме - меньше 1 кб !!! - (976 байт после сжатия) код:
.data
open db "open",0
failo db "c:\gon.exe",0
sait db "http://sait/5.exe",0
.code
start:
invoke URLDownloadToFile, NULL, addr sait, addr failo,0, NULL
invoke ShellExecute, 0, addr open, addr failo, NULL, NULL, SW_NORMAL
invoke ExitProcess, 0
end start
правда асм ругается на этот код (варнинг пишет) - но работает !
← →
AlexZ (2004-08-22 19:07) [16]>>Юрий Зотов © (22.08.04 07:59) [14]
Про компилятор:
Я не сравниваю, и не говорю, что Асм или С лучше Паскаля.
Когда сказал, что всё дело в компиляторе, я... (не первый раз на форумах приходиться объяснять) ...так вот:
>>Fay © (20.08.04 21:02) [5] - это доказвтельство.
Вы думаете, что ваш код начинает выполняться с инструкции begin? Увы, нет - и это ответ на вопрос о компилере. Вы НЕ можете контролировать преобразование Паскаль-кода в бинарные инструкции. Нет, я не рассист, я сам пользуюсь делфи. Но когда человек интересуется компактным и быстрым кодом, разве можно не упомянуть об Ассемблере. И разговор о компиляторах больше поддерживать не буду. Ведь они (компилеры, линкеры) разные бывают. Даже помню, был разговор, о том, что в Билдере непомню-какой-версии был "кривой" линкер. Некоторые его заменяли на более старую версию.
----
Насчёт Апи:
Корячиться с WinAPI (у меня D7)? Овчина выделки не стОит. (Это здесь уже чисто моё мнение, возможно разделяемое) Есть KOL (спасибо Кладову) - имхо, если потянуло на "минимальное приложение" - лучше не придумаешь. API в Асме - это единственный вариант написания полноценных Win32 приложений, да и к тому-же идёт контроль каждого байта. Вот здесь уже другого не дано, и есть за что побороться.
И ещё раз повторю, что я ни в коем случае не против high-level языков. Человек спросил - я ответил, что Асм - его лучший выбор (да и к тому-же это - язык процессора ;)
← →
Marser © (2004-08-22 19:23) [17]
> Но Апи в делфе - это немного изврат
Хи-хи :-))
А в С++ не изврат?
← →
Юрий Зотов © (2004-08-22 19:30) [18]> AlexZ (22.08.04 19:07) [16]
Никто и не спорит, что наиболее компактный и скоростной код получится на Асме (а еще более компактный и скоростной - непосредственно в машинных кодах, если на это хватит терпения).
Но при чем здесь Delphi? Разве можно сравнивать ее с Асмом? Давайте сравнивать продукты ОДНОГО класса, если уж мы хотим получить какие-то оценки - вот такое сравнение будет корректным.
И почему на Delphi с WinAPI надо именно "корячиться"? Не понимаю. Все вызовы WinAPI пишутся на Delphi точно так же, как и на Си, и на других ЯВУ. Где же тут "коряченье"?
Если уж говорить о "коряченье", то больше всего корячиться с вызовами WinAPI придется как раз на Асме. За регистрами следи сам, за стеком следи сам - и все это ради той же самой команды CALL. Оно, конечно, понятно, что это и есть наиболее скоростной и компактный код - но если уж говорить о "коряченье", то это тоже оно и есть.
← →
AlexZ (2004-08-22 20:43) [19]Да нет, вы меня не поняли:
Я просто сказал человеку: "Хочешь быстрый код в пару Кб? - возьми Асм, и не извращайся в _Языке высокого уровня_, ато выиграишь на копейках". И объяснил суть различия языков/компиляторов:
.386
.model flat, stdcall
.code
start:
ret
end start
Кстати, эта программа уже умеет корректно завершаться, после запуска из-под виндос.
Он это скомпилирует Ассемблером, и программа у него начнётся с команды ret (опкод C3h, $C3 по-паскалевски). И всё! Только header exe файла, и секция кода, с одним только байтом кода C3h !
>>Юрий Зотов © (22.08.04 19:30) [18]
>>(а еще более компактный и скоростной - непосредственно в машинных кодах, если на это хватит терпения)
Нет смысла. Ассемблер переводит условные команды в соответствующие им опкоды (комбинации байт), поэтому, ничего лишнего просто не может быть.
Про API уже сказал... приведу простой пример:
понадобилось мне вызвать несколько API, получить результаты одной, и отправить как параметр другой, и забыть.. Стек - отличное место для хранения temp данных. И за регистрами следить приятно - это же по сути "глобальные переменные". Есть за что "покорячиться". И PS: транслятор делфи многое неразрешает делать.
← →
Юрий Зотов © (2004-08-22 23:33) [20]> AlexZ (22.08.04 20:43) [19]
> Да нет, вы меня не поняли: Я просто сказал человеку: "Хочешь
> быстрый код в пару Кб? - возьми Асм, и не извращайся в _Языке
> высокого уровня_
Я понял Вас так, как Вы сами и сказали: (см. [10]):
1. "...на Делфи нельзя получить компактный и быстрый код..."
2. "... Но Апи в делфе - это немного изврат..."
Как видим, в обоих случаях Вы говорили конкретно о Delphi, а вовсе не о "_Языке высокого уровня_". В то время, как говорить надо было именно о любом ЯВУ, а Delphi здесь абсолютно ни при чем. На что я и отреагировал в [14].
> Он это скомпилирует Ассемблером, и программа у него
> начнётся с команды ret (опкод C3h, $C3 по-паскалевски).
> Ассемблер переводит условные команды в соответствующие им
> опкоды (комбинации байт)
Пожалуйста, не тратьте время на ненужные разъяснения. Я писал и на Асме, и в кодах - и еще не все забыл. :о)
> поэтому, ничего лишнего просто не может быть.
А вот тут Вы, IMHO, заблуждаетесь. Ассемблер - он ведь тоже всего лишь транслятор, а не искусственный интеллект, а современные процессоры - штука хитрая. Если бы Асм"ы делали просто прямой перевод, то при одном и том же входном коде все Асм"ы давали бы один и тот же машинный код - а ведь это совсем не так. Один Асм оптимизирует одно, другой - другое (например, даже простое сложение можно транслровать и в ADD, и в OR, не говоря уже о более сложных метериях). А человек все равно напишет лучше - потому что только у человека хватит интеллекта учесть в каждой точке программы все особенности железяки.
Если интересно, найдите статью Криса Касперски на эту тему (покопайтесь в архивах журнала на www.programme.ru). Там Крис сравнивает машинный код, полученный различными трансляторами (в том числе, ассемблерами) - и выясняется, что один из них лучше оптимизирует под конвейерную обработку, другой - еще под что-то и т.д. А интеллект ЧЕЛОВЕКА позволяет ему оптимизировать код в КАЖДОЙ точке программы именно так, как нужно конкретно в ЭТОЙ точке. Ни один транслятор/ассемблер на такое не способен (а если когда-нибудь станет способен, то это будет уже действительно искусственный интеллект).
> понадобилось мне вызвать несколько API, получить результаты
> одной, и отправить как параметр другой, и забыть.. Стек -
> отличное место для хранения temp данных. И за регистрами
> следить приятно - это же по сути "глобальные переменные". Есть
> за что "покорячиться".
Угу, есть за что, никто и не спорил. Говорилось о другом - что вот как раз на Асме с вызовами WinApi покорячиться больше всего и придется.
> И PS: транслятор делфи многое неразрешает делать.
И еще один PS, с Вашего разрешения: не транслятор Delphi, а транслятор любого ЯВУ. Позвольте еще раз подчеркнуть: любого. На то он и ЯВУ.
При чем тут Delphi? Почему Вы все время сравниваете Delphi с Асмом, а не ЯВУ с ЯНУ?
← →
AlexZ (2004-08-23 00:54) [21]Почему:
Да чел на форуме Делфи спросил: "Почему моя программа столько весит?" Вот я и ответил: "Не бери Делфи..."
----
Насчёт оптимизации кода и опкодах:
Вообще-то мне в таком случае кажктся странным, почему код, который я пишу и компилирую в MASM или TASM (я с остальными ассемблерами не знаком) я легко узнаю в отладчике? Команда в команду. Только имена переменных и метки стали адресами.
Оптимизация... сложение... умножение.. Незнаю. Я не пользуюсь макросредствами. И если я пишу div , то shr я не вижу после компиляции. Или это программирование не intel 80x86? Может это макросы как-то по-своему код оптимизируют?
----
Мой последний пост в этой теме, не смотря ни на что. Иначе это затянется на долго. Если Вы программили на Асме, то Вы понимаете, о чём речь. И факты - это не слова.
← →
Юрий Зотов © (2004-08-23 01:53) [22]Боже... ну при чем тут макросы?
← →
Германн © (2004-08-23 02:42) [23]2 AlexZ (23.08.04 00:54) [21]
>Почему:
>Да чел на форуме Делфи спросил: "Почему моя программа столько >весит?" Вот я и ответил: "Не бери Делфи..."
Чтобы "разделить мухи и котлеты". Вы говорите о "визуальной программе для пользователя" или о "системной задаче, не визуальной, которая выполняет небольшие, но необходимые действия"?
Если первое, то учтите времязатраты на разработку сией программы на АСМе. Если второе, то при чем тут Дельфи?
← →
MIGUR (2004-08-23 05:17) [24]ВСЁ ИЗВРАТ, А ЧТОСКАЖУ ДАЛЬШЕ ЕЩЁ ХУЖЕ, в инете аидел прогу котораю удаляет ненужные ресурсы из твоей проги (попробуй поищи мож найдеш видел давно) написанной на дельфях, а самый простой способ на мой взгляд сделать прогу мелкой возьми DELPHI 1-3 у ник по сравнению с версиями веше получается самый мелкий exe по размеру немного секономиш, потом сжимай aspack"ом, и если хош пеши код на asme or on api и усё, а нуда ну а изврат это ищи алгоритмы сжатия прог на api которые для делфи несыщеш???
← →
MIGUR (2004-08-23 05:17) [25]ВСЁ ИЗВРАТ, А ЧТОСКАЖУ ДАЛЬШЕ ЕЩЁ ХУЖЕ, в инете аидел прогу котораю удаляет ненужные ресурсы из твоей проги (попробуй поищи мож найдеш видел давно) написанной на дельфях, а самый простой способ на мой взгляд сделать прогу мелкой возьми DELPHI 1-3 у ник по сравнению с версиями веше получается самый мелкий exe по размеру немного секономиш, потом сжимай aspack"ом, и если хош пеши код на asme or on api и усё, а нуда ну а изврат это ищи алгоритмы сжатия прог на api которые для делфи несыщеш???
← →
Юрий Зотов © (2004-08-23 07:19) [26]> MIGUR (23.08.04 05:17) [25]
Скажите, а Вы в курсе, что упакованные программы маленькие только на диске, а в памяти - даже больше, чем неупакованные? И что они работают медленнее неупакованных?
← →
Думкин © (2004-08-23 07:22) [27]http://www.podgoretsky.com/cgi-bin/dlcounter/npscnt?file=http://podgoretsky.com/ftp/Docs/Misc/ExePack/ExePack.html&file_ id=ExePack
← →
Fay © (2004-08-23 09:43) [28]2 AlexZ (21.08.04 01:29) [10]
Приятно читать посты человека, который нормально изъясняется по-русски. И тем обиднее читать в этих постах глупости.
>> Но Апи в делфе - это немного изврат...
Редкое по глупости заявление. Даже в "Орешник" не сунешь - грусно такое читать.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2004.09.05;
Скачать: [xml.tar.bz2];
Память: 0.55 MB
Время: 0.033 c