![]() |
|
Модераторы: ZeeLax, powerfox |
![]()
|
|
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: нет Всего: 34 |
Предисловие:
Поехали ********************** Задание: "Понять что нам мешает запускать прекомиленные бинарники в линюхе" И так по общепринятому мнению в сообшестве уважаемых "real линуксоидов" считается плохим тоном распостранение софта в виде откомпиленных бинарников. Мотивируется это 2 основными предпосылками 1) "Нам нужна уверенность что в проге нет бэкдоров и всего такого!" 2) "Прекомпилед бинари файл незапустится если в системе либы не той версии!" отбросим первый аргумент как параноидальный и не заслуживаюший внимания и займемся технической стороной дела аргумента намбер 2 и так есть 3 варианта загрузки бинарника необращая внимание на версию glibc 1) патченье бинарника (точнее секции импорта, по аналогии с PE/EXE) 2) патченье бинарника для подмены лоадера ld-linux.so 3) изменение непосредственно лоадера ld-linux.so всем известно что прога написаная на С обращается за нужными ей функциями к shared library libc*.so сия хрень лежит обычно в /lib и так как происходит загрузка в теле elf файла есть многа всяких структур одна из них указвает на загрузчик ld-linux.so после того как мы кликнули в файл первым делом система проверит данную структуру , а именно на что она указвает, и загрузит /lib/ld-linux.so етот файлик имеет ответственное задание, подготовить нашу прогу к работе, в часности он проверяет какая версия glibc нужна проге а какая стоит в системе. Версия glibc указана в нашей проге открытым текстом ,в МС можно посматреть, там мы увидим нечто типа GLIBC.2.3.1 элегантной заменой этих циферок мы можем заставить грузится нашу прогу на нужной нам версии glibc работоспособность гарантирована данная фича справедлива и для других либ теперь передем к варианту намбер 2 заменив /lib/ld-linux.so на нечто типа ./main-loader получим шикарную возможность заменить системный загрузчик своим со всеми вытикаюшими последствиями и на последок вариант 3 (для любителей компиления) так как сорыцы ld-linux.so совсем не военная тайна том никто не мешает поменять там пару строк убрав проверку версий , но это не вариант ибо глупый юсер такого сделать не сумеет вывод: самый оптимальный вариант написать патчер версий патчер пишется без использования libc на системных вызовах получаем 100% совместимость с любым кернелом запустив его он получает версии нужных либ, ненавязчиво патчит прогу и все а теперь краткое лирическое отступление о совместимости либ (SUN для тебя) так как libc является стандартной сишной либой (ANSI) то имеет стандартный набор процедур printf он и в африке printf синтаксис всегда тотже и параметры теже, может менятся его реализация внутри либы так что для прикладного програмиста все останется прозрачным и незаметым другое дело если скомпилить прогу с супер пупер оптимизацией fastcall и все такое в данном случае да, на разных версиях может быть глюк так как никто не гарантирует сохранения значений регистров, но в общем случае при передаче параметров через стек все будет работать как положено. p.s. видимо комуто выгодно данное положение весчей с несовместимостью , сорцами и так далее, а теперь еше и в модулях версия кернела -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 1 Всего: 317 |
Неужели дела так обстоят? Никогда "туда" глубоко не копал, времени не было... Но мне всегда казалось что любая либа должна работать с программой если она версией не ниже чем запрашиваемая программой. Если произвели коренные изменения, то нужно создават новую либу держа старую как мёртвый груз ради совместимости.
-------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| oleg1973 |
|
||||||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: нет Всего: 34 |
а зачем?
данному коду пошарабану как реализован printf внутри либы при компиляции получим нечто типа
будет работать на ВСЕХ версиях glibc без исключения -------------------- SST 465555 icq 200-512-712 |
||||||
|
|||||||
| GrayCardinal |
|
||||||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 7 Всего: 58 |
ДА НИЧЕМ ЭТО НЕ МОТИВИРУЕТСЯ ! Вера у нас (Линуксоидов) такая !
НОРМАЛЬНО работать такая прога не будет.
Да ничего не мешает. Запускали и будем запускать. НО. Только свои, родные, проверенные (это не паранойя !), от которых можно взять код и посмотреть... Взять тот же мандрэйк - на сайте лежит три образа дисков с прекомпиленными прогами. Это есть гуд, если мне вломы собирать всю линуху с нуля. НО. Могу с того же сайта скачать исходник и собрать все СВОИМИ РУЧКАМИ. СВОЙ ВАРИАНТ Линухи. Или допустим - возьмем примитивную софтяну - "echo". Ну не знаю я как "printf" пишется. Взял посмотрел, прибавил к версии, допустим "© GrayCardinal 2005 For you, Svetlana !" Собрал и получаешь удовольствие. Хотя, в принципе, мне эта прога ("echo") ну вообще на @@@ не нужна и мой сервак будет пахать и без нее. Не, видимо тебе это не понять. CУВ. ЗЫ: И вообще, если бы Линуксоиды "зажимали" бы каждое "ноу-хау", то линухи бы не было. Да и сама Линуха это ТАКОЕ НОУ-ХАУ, только почему - то Линус ее в чулане не запер и на ключ не закрыл. Это сообщение отредактировал(а) GrayCardinal - 21.1.2005, 15:43 |
||||||
|
|||||||
| oleg1973 |
|
||||||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: нет Всего: 34 |
GrayCardinal
нуууу как в детсаде.... где обоснования что она не будет работать НОРМАЛЬНО? или ты это интуитивно чуеш?
не будем на личности переходить мы тут все серезные люди и рассуждаем о серезных весчах
интересно в чем там ноу-хау? -------------------- SST 465555 icq 200-512-712 |
||||||
|
|||||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 1 Всего: 317 |
Ладно printf не меняется. А теперь представь что ты написал прогу юзая некоторую либу, в некоторой функции ты нашёл баг, но оказалось что можно доработать её результат и всё будет в порядке. Со следующей версией функцию фиксят и она выдает всё как надо, а твои преобразования выдают ошибку, в результате прога не пашет. Разработчику либы в таких случаях нужно просто извинится и всё -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| oleg1973 |
|
|||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: нет Всего: 34 |
Sardar
это часный случай и если так тогда glibc самая глюкавая либа в мире а все девелоперы ламеры полные, что за 10 лет (если не больше) не смогли баги профиксить. ну а если копнуть в глубь то консольная прога на 99% использует glibc (едакий нашлепок над кернелом) и найти баг в ней видимо проблема ввиду ее вылизаности и стандартности p.s. давайте список либ которые вы используете, проверим -------------------- SST 465555 icq 200-512-712 |
|||
|
||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 7 Всего: 58 |
1. Нет обоснований что она будет нормально работать. Для этого прогу под Линуху обычно тестят кучей народу. Твою, ИМХО (приходится каждый раз писать, а то к словам придираются) никто тестить не будет. 2. Нормальная прога для линухи, ИМХО, прога _собранная_ для конкретного дистрибутива. |
|||
|
||||
| oleg1973 |
|
||||||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: нет Всего: 34 |
GrayCardinal
ты посты выше читал?
ну это твое личное субьективное мнение
ну и где тут шоколад? а если я ламер и компилировать не умею а так хочется заиметь xchat последней версии, а для моего дистра его еще не выпустили, че делать? GrayCardinal давай вообщем не брызгать фанатично слюной а предоставлять факты, желательно с примерами (это я насчет совместимости) -------------------- SST 465555 icq 200-512-712 |
||||||
|
|||||||
| GrayCardinal |
|
|||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 7 Всего: 58 |
oleg1973
Посты выше читал. А ты мои ? Извини. если что не так. Я последнее время нервный. Да и сам виноват - нефиг говорить про глупого пингвина на форуме линуксоидов Это сообщение отредактировал(а) GrayCardinal - 22.1.2005, 15:20 |
|||
|
||||
| GrayCardinal |
|
||||
|
Фигасе ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3039 Регистрация: 9.11.2003 Репутация: 7 Всего: 58 |
Ну давай |
||||
|
|||||
| oleg1973 |
|
||||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: нет Всего: 34 |
GrayCardinal
ну дак я факты предоставил с примерами практически от тебя пока только слюни были
1) если не знаеш или не компетентен то лучще промолчи
2) и у других будет работать -------------------- SST 465555 icq 200-512-712 |
||||
|
|||||
![]()
|
| Правила форума "Linux/UNIX: Oбщие вопросы" | |
|
|
В этом форуме предпочтительны вопросы на следующие темы:
За интересные статьи, находки, решения, программы и просто реальную помощь будут ставиться + в репу). В данный момент этот раздел модерируют nerezus, nickless, powerfox, pythonwin, Imple и ZeeLax. Если вы хотите помочь нам, пишите в ПМ и мы обсудим. Спасибо. И use UNIX or die; С уважением, nerezus, nickless, powerfox, pythonwin, Imple, ZeeLax. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Программное обеспечение под *NIX системы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |