Быстренько посчитал нельзя ли воткнуть код в пустое место, появившееся из-за выравнивания секций и получил не очень утешительный результат: на более старой системе средний объем свободного места равен 24, медиана 22; на более новой 27.5 и 24 соответственно. То есть, если загрузчик небольшой и вместе с несколькими jmp-ами умещается в 60-70байт, то заразить получится только 4-8% файлов. Зато есть и немного приятного - дофига места (как правило) есть в .gnu.conflict / .gnu.liblist, правда, затея эта довольно новая и в "старых" бинарях этой хрени нет вообще. В принципе, надо бы попробовать оба варианта, но пока лениво. Еще была мысль упаковать .gnu_version - это же чудо, как её можно пожать, пиши себе
![](http://vx.netlux.org/cgi-bin/mimetex.cgi?formdata=%5Clceil%5Clog_2%7B%5Cmax%5C+v_i%7D%5Crceil )
бит вместо 16 (ну еще hidden нужно учитывать) - и вот оно счастье, и только когда начал писать код сообразил, что LD_BIND_NOW разрушит эту идилию к хуям. Ж-)))
UPD о .gnu.*, почитал
доку, хорошая штука prelink, ведет себя, как заправский вирус, на выбор - добавляет сегмент, сдвигает код "вниз", заполняет .bss нулями и записывает после .bss дополнительные секции. Вот из-за переноса секций и появляются здоровенные дыры в сегменте кода. Ж-)