Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.54 MB
Время: 0.03 c
1-1092813867
race1
2004-08-18 11:24
2004.09.05
tmediaplayer


1-1092722839
RustiK
2004-08-17 10:07
2004.09.05
Убить System.pas


4-1090566377
Form_1
2004-07-23 11:06
2004.09.05
Неправильное преобразование?


3-1092130430
Dr. Andrey
2004-08-10 13:33
2004.09.05
Параметры процедуры AddNew для ADORecordset


1-1092641235
Timur
2004-08-16 11:27
2004.09.05
Компоненты для редактирования html?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский