Скачивание файла из URL
Запись от Замабувараев размещена 30.11.2021 в 18:41
Показов 1896
Комментарии 7
|
Предупреждение: это программа из категории «Спойлер: 2048 байт», если вы считаете, что в 21 веке нельзя экономить на диске, памяти и возиться с битами и байтами, обязательно напишите об этом комментарий. Как‐то на одном разделе форума Я обратил внимание, что их компилятор, когда в коде есть функция загрузки файла, вместо программ создаёт 180‐килобайтное Bloatware. Я подумал, а насколько можно вручную уменьшить размер исполняемого файла средствами компилятора, не прибегая к модификации екзешника? Оказалось, что функциональность загрузки файла с сайта можно уместить в 2048 байт. Потребуется всего лишь компилятор FreeBASIC. (Я не буду приводить весь код, только объясню что он делает, весь код лежит на гитхабе по ссылке) Чтобы уместиться в 2048 байт: * запретим линковку со статическими библиотеками вроде Runtime Library * будем вызывать функции ОС напрямую * установим собственную точку входа Начнём с конца. Создадим простой текстовый файл и напишем там функцию EntryPoint:
А компилятору мы скажем, чтобы он только оттранслировал код в промежуточное представление и остановился:
Таким образом мы получим программу примерно три килобайта. Чтобы уменьшить ещё, необходимо объединить секции .data и .text. Для этого у нас есть специальный сценарий линковщика, который удаляет всё лишнее и объединяет секции:
Программа консольная, можно переписать для GUI и окошек, но тогда будет пожирнее и помаслянистее, чем 2048 байт сейчас. Ещё в программе нет удаления созданной памяти. Во‐первых, ещё одна функция в таблице импорта приведёт к её переполнению. Во‐вторых, в данном случае это не актуально, программа не выделяет память в цикле, скачивает файл и тут же завершается, система сама всё очистит. Ссылка на исходный код: https://github.com/zamabuvaraeu/DownloadFile Релиз: https://github.com/zamabuvarae... g/v1.0.0.0 | ||||||||||||||||||||
Размещено в Без категории
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 7
Комментарии
-
При при этом почему-то умалчиваете что код кроссплатформенный (Windows, Linux, MacOS и др.) с поддержкой HTTPS. Ваш код только для винды.
180 КБ с учетом кроссплатформенности это очень немного.
Читая остальную часть статьи, возникает смыл - а зачем такие сложности? Затрата времени и сил больше чем возможная выгода.
Зачем одни и те же исходники продублировали в zip и tar.gz архивах?Запись от locm размещена 02.12.2021 в 19:16
-
Ну могли бы транслировать функции языка PureBasic в вызовы ОС вместо того, чтобы велосипедить закачку. Не поверю, что там где запускается PureBasic нет таких функций в ОС.
В 2021 году говорить об маленьких программах, уменьшении размера бинарника, экономии на памяти — это правило дурного тона. Я могу себе позволить писать маленькие программы.
Это причуды гитхаба при создании Release, я ничего такого не делал.Запись от Замабувараев размещена 02.12.2021 в 19:44
-
Почему бы тогда сразу со сценария линковщика не начать?
Или не написать на Бейсике программу, которая сама пишет виндовую DLL, выполняющую скачивание?Запись от politoto размещена 02.12.2021 в 20:28
-
Все эти правила как мода, которая приходит и уходит, а нормальное программирование остаётся.
В 2022 году может появиться что-то ещё. Но самое главное уже давно создано, а ерунда-2021 лишь отвлекает от реального дела.Запись от wer1 размещена 02.12.2021 в 20:35
-
Запись от Замабувараев размещена 04.12.2021 в 03:56
-
Я имею ввиду самодельную DLL, которая вызывает функцию из system32Запись от politoto размещена 04.12.2021 в 19:10
-
Не считается. А то так вообще можно сделать пакетный файл с содержимым «wget https://www.cyberforum.ru/», это будет всего лишь 30 байт, смотрите как коротко.Запись от Замабувараев размещена 06.12.2021 в 19:23


