Первый пост темы: dedivan Post: #471944 От:06.06.2015 (00:41) 21 августа 1991 года закончился августовский путч в СССР-
24 августа 1991 в центре Киева. Люди приветствуют провозглашение независимости
25 августа 1991 года Линус Товальдс опубликовал ядро Linux Date: 25 Aug 91 20:57:08 GMT
Просто совпадение? Можно быть, но есть еще много других совпадений.
Главное- это одинаковая методика зомбирования адептов Линукса и Нэзалежной.
Линуксоидов в мире точно столько же сколько и укропов- около 1 %.
О чем не спросишь линуксоида- ответ : хто нескаче тотмастдай
rsersh | Post: 472496 - Date: 14.06.15 (03:53)
с математикой думаю тут мало кто дружит
Что то мне подсказывает что такие люди есть 😀 и даже здесь, но вообще то для задач программирования не всегда нужна "заумная математика" - ассемблер - вот он нужен!... Другая задача - а где же взять такие вирусы? Говорят в жестких дисках в их прошивке есть, как вытащить и как отличить ту часть, которая диском занимается от той, которая занимается операционкой? И еще - известно что написать свой код бывает быстрее чем разбираться в чужом - значит параллельно нужно пытаться писать "обращение к системным возможностям" линукса помимо ядра.
Ну и пожалуй самый главный вопрос - а кому это все нужно? Мне лично пока хватает микроконтроллеров, а проги, которые с ними работают пишу под xp. На свою систему вместо хр перейти хотелось бы, но для меня одного - это излишне...
но вообще то для задач программирования не всегда нужна "заумная математика" - ассемблер - вот он нужен!
Я был очень удивлён когда узнал что ассемблеров множество. А ещё уидивило что оболочка программы написаная под другую систему исчисления (к примеру троичную а не двоичную) автоматически защищается себя от других вредоносных программ. Это всёравно что воду с маслом смешивать. Зато низкоуровневые программы могут отсечь высокоуровневые от постобработки и не давать им вызывать процедуры или прерывания. Так что всё на математике замешано.
_________________ Не хватит никакого здоровья, чтобы приспособиться к этому глубоко больному обществу(Кришна Мурти)/Горшки не Боги обжигают (многовековая классика)
dedivan Пост: 472493 От 13.Jun.2015 (22:47)
Вообще весь этот холивар про уязвимость линуха имеет смысл- это один из способов заставить работать железыку,
делать то, что нам нужно.
Потихоньку разбираясь с ядром, можно отметить главную дырку- это то, что линух написан полностью на Си.
Ну ты погугли для начала, чтобы не писать такую глупость! 🤢 асм+си [ссылка]
"Глупый это не значит что ума нет- это просто ум такой."
Да, есть вставки на асме, но основной код на Си, и значит ядро пользуется библиотекой.
То есть это абсолютно ничего не меняет.
В отличии от винды- у нее ядро не пользуется общей библиотекой.
Все программы пользуются библиотекой си, так в чем дыра, может драйвер нвидии дырявый не? кто тебе сказал, что венда не пользуется общими длл? дровами 🤢 В этом плане линукс более защищен, потому что дрова почти все в ядре модулями, а в венде по всему инету в виде экзешников! 😬
Вот чудо то какое....
Дед, поиск неизвестно чего неизвестно где.... Это очень интересная задача!
И логика методом исключений это конечно же хорошо, но правильно ли?
Можно было бы и чего нить другое придумать?
dedivan Пост: 472516 От 14.Jun.2015 (01:38)
Ну ты еще расскажи нам как работает компилятор.
Может чего пропустил?
Компиляция — трансляция программы, составленной на исходном языке высокого уровня, в эквивалентную программу на низкоуровневом языке, близком машинному коду. Понятно, что при компиляции какие то функции подхватываются из библиотеки, но они там в машинном коде уже хранятся, в чем траблы дед? 😬
xx0 Пост: 472599 От 14.Jun.2015 (18:19)
в чем траблы дед? 😬
Так дальше давай- вот в ядре сотня модулей на си, обращаются к одной и той же библиотечной функции. Компилятор вставляет код этой функции в каждый модуль или как?
DevilR Пост: 472606 От 14.Jun.2015 (22:47)
. Вызов функции - это "положить входные параметры в стек
Адрес функций лежит в заранее заготовленной таблице.
Так стек общий или нет? А что там еще в стеке лежит?
А как ты можешь посмотреть что там положил модуль ядра перед тобой?
Простые команды ассемблера знаешь для этого?
DevilR Пост: 472606 От 14.Jun.2015 (22:47)
В защищенном режиме подобное поведение просто вызовет исключение и процесс убьется целиком.
Это абстракция. На разных уровнях абстракции можно говорить о защищенной памяти или просто о содержании регистра в процессоре.
В одной абстракции нельзя выйти за границы памяти, потому что ты обращаешься к модулю менеджера памяти. он смотрит- что тебе отведено, и если разрешено- то что то записывает в регистр, а в другой абстракции можешь сам изменить этот регистр, процессору все равно кто меняет. Это как паровоз- ему все равно кого везти, с билетом или без билета- билеты проверяет кондуктор а не паровоз.
инлайны в основном применяются в том случае, если функция вызывается во всей программе только один раз,
тогда есть смысл копировать код фунции в текст программы, а не делать отдельный вызов.
при этом и программа работает быстрее, и размер кода не увеличивается.
DevilR Пост: 472614 От 14.Jun.2015 (23:36)
. Как эмбедчик говорю. 😀
Это хорошо. Значит можно и поконкретнее поговорить.
Вот есть платка- это целый ком на уровне первого пенька. только пошустрее.
Камень в корпусе бга. печатка пятислойная- не для домашнего утюжного исполнения. Есть консоль загрузчика, есть житаг, задача залезть в программу.
Понятно, что тут никакие защищенные памяти не защищают.
Это просто по пути возник разговор, что не только при аппаратном доступе, и програмно можно залезать куда хочешь, используя как раз особенности линуха.
DevilR Пост: 472637 От 15.Jun.2015 (01:29)
А насчет инлайнов в линуксе - врете вы, дедушка! 😀
Только что посмотрел в своем ядре 4.0.5 - 5460 штук.
Это хорошо- значит грамотный. Теперь смотри что они вводят и сколько раз.
Даже сайты специальные есть для поиска в ядре линуха.
Для примера-static inline struct cgroup- один раз во всем тексте.
Это и есть правило использования инлайнов.
Все остальное делается через вызовы библиотек.
DevilR Пост: 472642 От 15.Jun.2015 (01:45)
Но говорить за весь линух... вы бы дали конкретный код - я бы проверил. Хоть на одноплатках, хоть на настольном компе.
Это пока на уровне идеи. Просто она возникла не на пустом месте,
а как раз в процессе разбора особенностей ядра линукса и его компиляторов.
DevilR Пост: 472646 От 15.Jun.2015 (02:04)
P.S. Нет компиляторов ядра. Не бывает. Компилятор (или интерпретатор) языка - это да, есть. Например gcc для c...
Тот же gcc сотни релизов и все разные. Ядро у тебя собрано одним,
а пользовательскую програмку взял готовую- собранную другим компилятором.
Вон хохоша вообще не парится- берет готовые образы.
Поэтому и не любая программа запускается на разных дистрибутивах линукса. Вроде ядро одно и то же- а скомпилили с разными ключиками
и разными версиями компиляторов.
Вот и не находят они свои библиотеки.
А отсюда вывод- програмка знает где должна быть ее библиотека. Если она там вдруг не лежит- ядро ей не подсказывает. А раскладывает библиотеки ядро по правилам своего компилятора.
Второе- допустим все нормально запустилось, программа загрузила одну из библиотек.
Наступает прерывание по таймеру и начинает работать ядро, ему допустим
понадобилась та же самая библиотека, а она вот уже готовая в памяти.
Вопрос- ядро будет загружать новый экземпляр библиотеки или воспользуется имеющимся?
DevilR Пост: 472661 От 15.Jun.2015 (11:12)
Компиляторы одного класса (например gcc) не настолько уж и разные, как кажется.
До 12 года на си писали их. после на плюсах, и ты думаешь они одинаково компилируют? Как раз в части динамического связывания.
По моему вообще перпендикулярно.
Но я не специалист практик - тут я полный ноль, просто еще давно у самых истоков - вот там чего то ковырял , то что сейчас уже идеологией программирования стало.
Я гляжу ты единственный из линуксоидов понял, что я не линух хочу обидеть,
А его мамашу- потаскушку от нее все дыры. От компиляции.
Вот ты знаешь хоть один компилятор гнуса, который разработывался бы с точки зрения защиты, а не быстродействия или сокращения кода?
Можно просто смотреть версию подгружаемой библиотеки и отказываться грузить неправильную.
Да версию каку хочешь написать можно.
Интересно другое - именно фиксированное распределение вызовов по памяти.
Или что то там динамическое бывает?
DevilR Пост: 472736 От 15.Jun.2015 (15:43)
Там просто все - есть таймер, который переключает контекст задач.
А вот на момент создания процесса, запускающий процесс распределяет память
Вот и я про то- что линух переключается 100 раз в секунду.
За один тик он может сделать около 10 млн операций- тут можно успеть все что хочешь сделать. и контроль идет только во время переключения,
когда может быть уже поздно.
А вот про момент создания - давай поподробнее- откудаось берет инфу куда затолкнуть процкесс и сколько ему нужно- из самого процесса?
Инфа вставлена на этапе компиляции?
dedivan Пост: 472649 От 15.Jun.2015 (02:32)
Вопрос- ядро будет загружать новый экземпляр библиотеки или воспользуется имеющимся?
ядро знать ничего не будет про "имеющееся", поскольку "имеется" оно в другой области памяти и вызвано другой программой, которая в данный момент времени для ядра "не существует" и не выполняется.
Но это не значит что ядро убого работает и не может кэшировать данные, есть кэш накопителя хардверный (в виде встроенной в него памяти) есть кэш фс софтверный, эта библиотечка и там и там отметится в виде последовательности секторов или файла и будет "повторно считана" со скоростью значительно превышающей стандартную скорость чтения с диска.... и кстати про "вот она готовая в памяти"
В памяти нет файловой системы, там код, нельзя взять кусок кода и переместить в память выделенную для другой программы, мало того в памяти хранится только текущая программа, а библиотеки различные которые вызываются в процессе занимают память лишь временно на этапе выполнения, происходит это примерно так (возьму для примера винду отличия не принципиальны) программа хочет обработать некие промежуточные данные и получить результат обработки в качестве значения переменной или содержимого буфера, программа вызывает библиотеку, при вызове передает ей некоторое количество параметров и в качестве результата после выполнения этой библиотеки получает некую переменную или последовательность данных в буфере, как только эти данные получены уже никакой библиотеки в памяти нету (кстати еще не факт что она вообще выполняется в памяти вызывающего процесса, тут уж точно не скажу боюсь соврать) Зато в кэше есть и сама библиотека и данные и брать их оттуда может любая программа а не только та которая библиотеку вызвала....