суперкороткую затычку (напр CGI), 2-3 оператораю. Короче 4 Кб не выходит. Нет ли резервов? А если компилить в a.out? Подскажите, если кто имеет опыт, пожалуйста.
strip имя_эльфа
>суперкороткую затычку (напр CGI), 2-3 оператораю. Короче 4 Кб не выходит. Нет
>ли резервов? А если компилить в a.out? Подскажите, если кто имеет
>опыт, пожалуйста.
1) -Os при компиляции, но меленький размер - не всегда маленькая производительность ...
2) man strip
3) strip -s <executable>
>1) -Os при компиляции, но меленький размер - не всегда маленькая производительность
>...
>2) man strip
>3) strip -s <executable>
а я думал что у gcc есть ключи для компиляции не в ELF а в старый a.out но ничего в мане не нашёл :-(((Из 4952 Получилось 3284
Спасибо
>суперкороткую затычку (напр CGI), 2-3 оператораю. Короче 4 Кб не выходит. Нет
>ли резервов? А если компилить в a.out? Подскажите, если кто имеет
>опыт, пожалуйста.Есть, есть резервы:
-nostdlib
-nostartfiles
-nodefaultlibsНо овчинка выделки не стоит. Головной боли не оберетесь. А выигрыш не ахти какой: int main() { return 0; } довелся до 600 байт. Если дело в размере, может, лучше на перле?
>-nostdlib
>-nostartfiles
>-nodefaultlibsспасибо, но я всё же пользую stdlib
CGI скрипт возвращает браувсеру Status: 301 и Location: зависимый от строки запроса>байт. Если дело в размере, может, лучше на перле?
интерпретатор заглотит на порядок больше ресурсов.
А на диске - без разницы.Всем огромное спасибо.
>суперкороткую затычку (напр CGI), 2-3 оператораю. Короче 4 Кб не выходит. Нет
>ли резервов? А если компилить в a.out? Подскажите, если кто имеет
>опыт, пожалуйста.Есть еще одна возможность - самому сформировать ЭЛЬФА. Для этого можно
использовать assembler. Например в моем любимом nasm-е есть опция -f bin,
позволяющая создавать бинарники:
;; hello.asm
BITS 32
org 0x05936000
db 0x7F, "ELF"
dd 1
dd 0
dd $$
dw 2
dw 3
_start: inc eax
mov dl, 13
cmp al, _start - $$
pusha
xchg eax, ebx
add eax, dword 4
mov ecx, msg
int 0x80
popa
int 0x80
dw 0x20
dw 1
msg: db 'hello, world', 10
;;----------------------------------------компилить так:
nasm -f bin -o hello hello.asm
chmod +x helloРазмер 59 байт. Работает под Линуксом с ядрами от 2.2
Этот пример и доки как создавать маленькие ELF нарыл в инете, но не помню
где - давно это было.
>использовать assembler. Например в моем любимом nasm-е есть опция -f bin,
>позволяющая создавать бинарники:вот-вот, что-то типа этого и надо.
На асме я под *NIX не писал ещё, надо попробовать
Если же не формировать эльф самому, то выйдет байт 450 - ассемблер рулит!
А вот адреса
- www.linuxassembly.org
- www.muppedlabs.com/~breadbox/software/tiny/teensy.html
А еще смотри Assembly-HOWTO
>Если же не формировать эльф самому, то выйдет байт 450 - ассемблер
>рулит!Спасибо за ссылки, dimus.
Короткий опыт использования бинарных CGI показал, что прога, собраная с библиотеками статически (-static) отрабатывает быстрее, а самое главное - не требует бинарников из /usr/lib, которых, как показал опыт, иногда нужных не бывает.
Задача, собранная с библиотеками статически, на порядок больше размером. В связи с чем борьба за каждый байт становится бессмысленной. Если 4K или 3K - это большая разница, то 64K или 63K - разница неощутима. Хотя все возможные ключи для оптимизации размера, конечно, применяю.Best Regards!