Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.09.05;
Скачать: CL | DM;

Вниз

Как написать маленькую программу?   Найти похожие ветки 

 
Скромный инкогнито   (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;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.026 c
11-1080404565
user
2004-03-27 19:22
2004.09.05
а можноли какнибуть узнать текущее состояние таймера???


1-1092402222
Shc
2004-08-13 17:03
2004.09.05
Многоязычность приложения


3-1092115564
wild_arg
2004-08-10 09:26
2004.09.05
Выборка


1-1093004709
Sectey
2004-08-20 16:25
2004.09.05
Strring to PAnsiString Как ?


14-1092638440
Kerk
2004-08-16 10:40
2004.09.05
Болит запястье