Як написати маленьку програму?
Підкажіть, ув. майстра, який модуль мені використовувати, щоб написати програму для роботи з реєстром без графічного інтерфейсу. Пробував winAPI - 14.5 kb, KOL -теж саме. Може є модуль, який робить програму ще менше. Наприклад десь бачив вихідні трояна, так він взагалі 7 кб важив. Або такого не буває?
Вам треба писати на асемблера. Delphi навіть з асемблернимі вставками вам не допоможе.
А ти що троян пишеш?
Дає 8162 Кб. Стандартні компілятор 6-го Дельфі.
Асемблер: C3 (ret) - 1 байт :)
Нагадую: форум по Delphi :-)
Ні собі хрону! А у мене на D6 8192 байт :-)
А якщо ще й заUPXіть, то ваще 5120 байт. Ось.
Гей, консерватори, у кого Delphi 1, повідомте свої результати. )
Скромний інкогніто. я тут вже мав неосорожность сказати, що на Делфі можна отримати компактний і швидкий код, і були люди, готові посперечатися, однак факт є факт. Вся справа в компіляіторе.
Я все частіше і частіше бачу такі вороса. Та й сам колись ставив. Пробував KOL - це супер для візуальних програм. WinAPI теж було. Але Апі в Делфі - це трохи перекрутив. Висновок: Асемблер нікгди не завадить. Так що ніяким боком Делфі і мінімальне додаток не пов'язані. Делфі - це швидкість розробки і краса високорівневого мови.
А на чому можна написати assembler код. У сенсі є спеціальний програми для цього?
Скромний інкогніто. асемблерний код можна написати навіть в Блокноті (я так і роблю). Є ще різні IDE для асемблера, такі, як RadAsm, AsmEdit. У підсумку цей текстовий файл компілюється, виходить об'єктний файл. Потім, програмою-компоновщиком (Лінкер, в просторіччі), об'єднуються об'єктні файли с. наприклад, файлом ресурсів, ну або просто, між собою. І на виході свіжий exe / com / dll / drv файл (все залежить від налаштувань). Найбільш поширений Асемблер (АСМ, простіше кажучи) - це MASM і TASM.
Хм. я бачу, Ви уявляєте перспективи асемблера.
> AlexZ # XA0; (21.08.04 1:29) [10]
> На Делфі можна отримати компактний і швидкий код
> Але Апі в Делфі - це трохи перекрутив.
Чому? Виклик функцій API в C-програмою - це перекрутив? А виклик функцій API в Asm-програмою - це перекрутив? Так чому ж виклик тих же самих функцій в Pascal-програмі (або в Fortran-програмі, або в будь-якій іншій програмі) Ви вважаєте перекрутити? Досить складно зрозуміти, чим один CALL відрізняється від іншого.
я писав прогу для скачування з мережі файлу на Делфі і ассамблере:
на Делфі після стиснення близько 3696 б - имхо непогано, але на Асмі - менше 1 кб. - (976 байт після стиснення) код:
start:
invoke URLDownloadToFile, NULL, addr sait, addr failo, 0, NULL
invoke ShellExecute, 0, addr open, addr failo, NULL, NULL, SW_NORMAL
invoke # XA0; ExitProcess, 0
end start
правда АСМ лається на цей код (Варнінг пише) - але працює!
> Але Апі в Делфі - це трохи перекрутив
Хі-хі :-))
А в С ++ НЕ перекрутив?
> AlexZ # XA0; (22.08.04 19:07) [16]
Ніхто і не сперечається, що найбільш компактний і швидкісний код вийде на Асмі (а ще більш компактний і швидкісний - безпосередньо в машинних кодах, якщо на це вистачить терпіння).
Але при чому тут Delphi? Хіба можна порівнювати її з Асмом? Давайте порівнювати продукти ОДНОГО класу, якщо вже ми хочемо отримати якісь оцінки - ось таке порівняння буде коректним.
І чому на Delphi з WinAPI треба саме "корячитися"? Не розумію. Всі виклики WinAPI пишуться на Delphi точно так же, як і на Сі, і на інших ЯВУ. Де ж тут "коряченье"?
Якщо вже говорити про "коряченье", то найбільше корячиться з викликами WinAPI припаде саме на Асмі. За регістрами стеж сам, за стеком стеж сам - і все це заради тієї ж самої команди CALL. Воно, звичайно, зрозуміло, що це і є найбільш швидкісний і компактний код - але якщо вже говорити про "коряченье", то це теж воно і є.
> AlexZ # XA0; (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 з Асмом, а не ЯВУ з Яну?
Боже. ну при чому тут макроси?
2 AlexZ # XA0; (23.08.04 00:54) [21]
> Чому:
> Так чол на форумі Делфі запитав: "Чому моя програма стільки> важить?" Ось я і відповів: "Не бери Делфі."
Щоб "розділити мухи і котлети". Ви говорите про "візуальної програми для користувача" або про "системній задачі, які не візуальної, яка виконує невеликі, але необхідні дії"?
Якщо перше, то врахуйте времязатрати на розробку сией програми на АСМЕ. Якщо друге, то при чому тут Дельфі?
> MIGUR # XA0; (23.08.04 5:17) [25]
Скажіть, а Ви в курсі, що упаковані програми маленькі тільки на диску, а в пам'яті - навіть більше, ніж неупаковані? І що вони працюють повільніше неупакованих?