ELF section padding

Apr 11, 2008 16:14

Быстренько посчитал нельзя ли воткнуть код в пустое место, появившееся из-за выравнивания секций и получил не очень утешительный результат: на более старой системе средний объем свободного места равен 24, медиана 22; на более новой 27.5 и 24 соответственно. То есть, если загрузчик небольшой и вместе с несколькими jmp-ами умещается в 60-70байт, то заразить получится только 4-8% файлов. Зато есть и немного приятного - дофига места (как правило) есть в .gnu.conflict / .gnu.liblist, правда, затея эта довольно новая и в "старых" бинарях этой хрени нет вообще. В принципе, надо бы попробовать оба варианта, но пока лениво. Еще была мысль упаковать .gnu_version - это же чудо, как её можно пожать, пиши себе
бит вместо 16 (ну еще hidden нужно учитывать) - и вот оно счастье, и только когда начал писать код сообразил, что LD_BIND_NOW разрушит эту идилию к хуям. Ж-)))
UPD о .gnu.*, почитал доку, хорошая штука prelink, ведет себя, как заправский вирус, на выбор - добавляет сегмент, сдвигает код "вниз", заполняет .bss нулями и записывает после .bss дополнительные секции. Вот из-за переноса секций и появляются здоровенные дыры в сегменте кода. Ж-)
Previous post Next post
Up