Как стать автором
Обновить

ReactOS дайджест #2

Время на прочтение 1 мин
Количество просмотров 1.2K
Open source *
image
  • Стартап WooS.NET ищет потенциальных инвесторов. Если вы заинтересованы в инвестировании, пожалуйста свяжитесь со мной через систему личных сообщений Хабра.
  • ReactOS под брендом WooS выиграл грант на 100 тысяч рублей во время проведения Селигера в рамках номинации «лучшая презентация проекта». Еще публикации [1],[2]
  • Проект ReactOS принимал участие в Thomas Krenn Open Source Förderung 2011, занял там 5 место и выиграл 700 евро.
  • Участие в программе Google Summer of Code плодотворно движется к практически триумфальному завершению. Почти готова поддержка тем визуального оформления. Полностью переписан и залит в транк (основная ветка разработки) сетевой стек операционной ситемы. Результаты работы по еще 4 слотам «лета кода» ожидаются в самом скором времени.
  • Alex Ionescu вернулся в команду разработчиков проекта.
  • Вышли и были переведены на русский язык выпуски новостей №86, №85, №84, и №83
  • Все самые свежие и горячие новости о наших достижениях всегда можно узнать через живой журнал, твиттер, фейсбук или вконтакте, где нас очень легко найти по словам reactos или woos


UPD. Официальный сайт коммерческого стартапа WooS.NET — www.woos.es

Пара интересных видео о проекте ReactOS-WooS
Всего голосов 62: ↑49 и ↓13 +36
Комментарии 45

Несколько подробностей о функции main

Время на прочтение 5 мин
Количество просмотров 17K
Настройка Linux *
Из песочницы
Однажды заинтересовался, содержимым стека функции main процесса в linux. Провел некоторые изыскания и теперь представляю вам результат.

Варианты описания функции main:
1. int main()
2. int main(int argc, char **argv)
3. int main(int argc, char **argv, char **env)
4. int main(int argc, char **argv, char **env, ElfW(auxv_t) auxv[])
5. int main(int argc, char **argv, char **env, char **apple)

argc — число параметров
argv — нуль-терминальный массив указателей на строки параметров командной строки
env — нуль-терминальный массив указателей на строки переменных окружения. Каждая строка в формате ИМЯ=ЗНАЧЕНИЕ
auxv — массив вспомогательных значение (доступно только для PowerPC [1])
apple — путь к исполняемому файлу (в MacOS и Darwin [2])
Вспомогательный вектор — массив с различной дополнительной информацией, такой как эффективный идентификатор пользователя, признак setuid бита, размер страницы памяти и т.п.

Далее о том как получить массив вспомогательных значений для i386 и x86_64, а также об остальном содержимом «сегмента» стека.
Читать дальше →
Всего голосов 87: ↑82 и ↓5 +77
Комментарии 8

Tasks и Back Stack в Android

Время на прочтение 5 мин
Количество просмотров 77K
Разработка под Android *
Туториал
Привет. Из названия темы вы могли заметить, что речь пойдет о том, как устроены Tasks и Back Stack в Android. Эта статья будет являться свободным переводом официального источника. Тема больше ориентирована на новичков, но я думаю, что и опытный разработчик сможет узнать что-то новое, т.к. тема специфична и не часто приходится кастомизировать поведение наших Activity.
Читать дальше →
Всего голосов 22: ↑18 и ↓4 +14
Комментарии 12

Lock-free структуры данных. Эволюция стека

Время на прочтение 10 мин
Количество просмотров 41K
Программирование *C++ *

В предыдущих своих заметках я описал основу, на которой строятся lock-free структуры данных, и базовые алгоритмы управления временем жизни элементов lock-free структур данных. Это была прелюдия к описанию собственно lock-free контейнеров. Но далее я столкнулся с проблемой: как построить дальнейший рассказ? Просто описывать известные мне алгоритмы? Это довольно скучно: много [псевдо-]кода, обилие деталей, важных, конечно, но весьма специфических. В конце концов, это есть в опубликованных работах, на которые я даю ссылки, и в гораздо более подробном и строгом изложении. Мне же хотелось рассказать интересно об интересных вещах, показать пути развития подходов к конструированию конкурентных контейнеров.
Хорошо, — подумал я, — тогда метод изложения должен быть такой: берем какой-то тип контейнера — очередь, map, hash map, — и делаем обзор известных на сегодняшний день оригинальных алгоритмов для этого типа контейнера. С чего начать? И тут я вспомнил о самой простой структуре данных — о стеке.
Читать дальше →
Всего голосов 73: ↑73 и ↓0 +73
Комментарии 14

Путешествие по Стеку. Часть 1

Время на прочтение 7 мин
Количество просмотров 84K
Блог компании Smart-Soft Программирование *C *
Recovery mode
Перевод


В предыдущих материалах мы рассмотрели размещение программы в памяти – одну из центральных концепций, касающихся выполнения программ на компьютерах. Теперь обратимся к стеку вызовов – рабочей лошадке большинства языков программирования и виртуальных машин. Нас ожидает знакомство с удивительными вещами вроде функций-замыканий, переполнений буфера и рекурсии. Однако всему свое время – в начале нужно составить базовое представление о том, как работает стек.
Читать дальше →
Всего голосов 47: ↑44 и ↓3 +41
Комментарии 15

Как устроены дыры в безопасности: переполнение буфера

Время на прочтение 29 мин
Количество просмотров 119K
Информационная безопасность *Разработка веб-сайтов *Программирование *Компиляторы *C *
Перевод
Прим. переводчика: Это перевод статьи Питера Брайта (Peter Bright) «How security flaws work: The buffer overflow» о том, как работает переполнение буфера и как развивались уязвимости и методы защиты.

Беря своё начало с Червя Морриса (Morris Worm) 1988 года, эта проблема поразила всех, и Linux, и Windows.



Переполнение буфера (buffer overflow) давно известно в области компьютерной безопасности. Даже первый само-распространяющийся Интернет-червь — Червь Морриса 1988 года — использовал переполнение буфера в Unix-демоне finger для распространения между машинами. Двадцать семь лет спустя, переполнение буфера остаётся источником проблем. Разработчики Windows изменили свой подход к безопасности после двух основанных на переполнении буфера эксплойтов в начале двухтысячных. А обнаруженное в мае сего года переполнение буфера в Linux драйвере (потенциально) подставляет под удар миллионы домашних и SMB маршрутизаторов.

По своей сути, переполнение буфера является невероятно простым багом, происходящим из распространённой практики. Компьютерные программы часто работают с блоками данных, читаемых с диска, из сети, или даже с клавиатуры. Для размещения этих данных, программы выделяют блоки памяти конечного размера — буферы. Переполнение буфера происходит, когда происходит запись или чтение объёма данных большего, чем вмещает буфер.

На поверхности, это выглядит как весьма глупая ошибка. В конце концов, программа знает размер буфера, а значит, должно быть несложно удостоверится, что программа никогда не попытается положить в буфер больше, чем известный размер. И вы были бы правы, рассуждая таким образом. Однако переполнения буфера продолжают происходить, а результаты часто представляют собой катастрофу для безопасности.
Читать дальше →
Всего голосов 48: ↑47 и ↓1 +46
Комментарии 29

Стекирование коммутаторов Cisco. Часть 1

Время на прочтение 7 мин
Количество просмотров 79K
Блог компании CBS Cisco *Сетевые технологии *


В данной статье (будет состоять из двух частей) хотел бы кратко пройтись по основным технологиям стекирования коммутаторов Cisco. Попробуем разобраться с общей архитектурой передачи пакетов в рамках каждого типа стека, реакцией на отказы, а также с цифрами пропускной способности. В первой части мы рассмотрим технологии StackWise и StackWise Plus. Во второй части — StackWise-160, StackWise-480, FlexStack и FlexStack Plus.
Читать дальше →
Всего голосов 12: ↑10 и ↓2 +8
Комментарии 5

Стекирование коммутаторов Cisco. Часть 2

Время на прочтение 6 мин
Количество просмотров 44K
Блог компании CBS Cisco *Сетевые технологии *

Всех приветствую!
В первой части данной статьи мы рассмотрели достаточно старые технологии стекирования для семейства коммутаторов Cisco 3750, а именно StackWise и StackWise Plus. Сегодня предлагаю продолжить рассмотрение остальных технологий. Напомню, у нас остались StackWise-160, StackWise-480, FlexStack и FlexStack Plus.
Читать дальше →
Всего голосов 9: ↑8 и ↓1 +7
Комментарии 9

Lock-free алгоритмы и реализация стека

Время на прочтение 5 мин
Количество просмотров 23K
C++ *C *Параллельное программирование *
В данной статье хочу поднять несколько холиварную тему — тему безлоковых алгоритмов, а в частности реализации безлокового стека. Точнее, стек этот условно безлоковый, почему — будет ясно далее. Хочу сразу предупредить, что все примеры будут даны на языке C.

Для начала, для тех кто не очень в теме, хочу вкратце рассказать, что такое безлоковые алгоритмы, и зачем они нужны. Зачастую в многопоточных приложениях используется доступ к одним и тем же данным из нескольких потоков, как пример могу привести очередь обработки. Для того чтобы эти данные оставались консистентными (целостными) необходимы методы их защиты от одновременных несогласованных изменений. Обычно такими методами являются всевозможные локи, (спинлоки, мьютексы), которые полностью предотвращают одновременный доступ к данным, закрываясь перед доступом к данным на чтение или запись, и открываясь после того, как необходимая операция завершилась.
Читать дальше →
Всего голосов 20: ↑16 и ↓4 +12
Комментарии 21

Есть ли стекирование в коммутаторах Cisco Nexus?

Время на прочтение 5 мин
Количество просмотров 20K
Блог компании CBS Системное администрирование *Cisco *Сетевые технологии *

Когда речь заходит о коммутаторах Cisco Nexus, один из первых вопросов, который мне задают: поддерживается ли на них стекирование? Услышав отрицательней ответ, следует логичное «Почему?».
Читать дальше →
Всего голосов 16: ↑16 и ↓0 +16
Комментарии 1

Что происходит за кулисами С#: основы работы со стеком

Время на прочтение 6 мин
Количество просмотров 13K
Ненормальное программирование *.NET *Assembler *C# *ООП *
Предлагаю посмотреть все то, что стоит за простыми строками инициализации объектов, вызова методов и передачи параметров. Ну и, разумеется, использование этих сведений на практике — вычитывание стека вызывающего метода.

Дисклеймер


Прежде, чем приступить к повествованию, настоятельно рекомендую ознакомиться с первым постом про StructLayout, т.к. там разобран пример, который будет использоваться в этой статье.

Весь код, кроющийся за высокоуровневым, представлен для режима отладки, именно он показывают концептуальную основу. Также все изложенное рассмотрено для 32 битной платформы. JIT оптимизации — это отдельная и большая тема, которая здесь рассматриваться не будет.

Также хотелось бы предупредить, что данная статья не содержит материал, который стоит применять в реальных проектах.

Начинаем с теории


Любой код в конечном итоге становится набором машинных комманд. Наиболее понятно их представление в виде инструкций языка Ассемблера, прямо соответсвующих одной (или нескольким) машинным инструкциям.

Читать дальше →
Всего голосов 22: ↑22 и ↓0 +22
Комментарии 11

Ломаем фундаментальные основы C#: выделение памяти под ссылочный тип на стеке

Время на прочтение 6 мин
Количество просмотров 20K
Ненормальное программирование *.NET *C# *ООП *
В данной статье будут приведены основы внутреннего устройста типов, а также пример, в котором память под ссылочный тип будет выделена полностью на стеке (это потому что я full-stack программист).



Дисклеймер


Данная статья не содержит материал, который стоит применять в реальных проектах. Это просто расширение границ, в которых воспринимается язык программирования.

Прежде, чем приступить к повествованию, настоятельно рекомендую ознакомиться с первым постом про StructLayout, т.к. там разобран пример, который будет использоваться в этой статье (Впрочем, как и всегда).
Читать дальше →
Всего голосов 22: ↑21 и ↓1 +20
Комментарии 13

[The Old New Thing] Могу ли я использовать свой стек как угодно?

Время на прочтение 3 мин
Количество просмотров 4.4K
Ненормальное программирование *Assembler *Системное программирование *Разработка под Windows *
Перевод

В Windows стек растет от больших адресов к меньшим. Иногда это определяется архитектурно, а иногда это просто принятое соглашение. Значение указателя стека (регистр процессора), является указателем на значение в верхней части стека. А значения, расположенные глубже по стеку, соответственно, находятся по большим адресам. Но что происходит с данными, которые расположены по адресам, меньшим, чем указатель стека?



Соглашения для некоторых (но не для всех) архитектур определяют красную зону, которая является областью памяти под указателем стека, но которая по-прежнему валидна для использования приложением.

Читать дальше →
Всего голосов 17: ↑16 и ↓1 +15
Комментарии 24

What happens behind the scenes C#: the basics of working with the stack

Время на прочтение 6 мин
Количество просмотров 6.4K
.NET *Assembler *C# *
Перевод
I propose to look at the internals that are behind the simple lines of initializing of the objects, calling methods, and passing parameters. And, of course, we will use this information in practice — we will subtract the stack of the calling method.

Disclaimer


Before proceeding with the story, I strongly recommend you to read the first post about StructLayout, there is an example that will be used in this article.

All code behind the high-level one is presented for the debug mode, because it shows the conceptual basis. JIT optimization is a separate big topic that will not be covered here.

I would also like to warn that this article does not contain material that should be used in real projects.

First — theory


Any code eventually becomes a set of machine commands. Most understandable is their representation in the form of Assembly language instructions that directly correspond to one (or several) machine instructions.

Read more →
Всего голосов 11: ↑10 и ↓1 +9
Комментарии 0

Breaking down the fundamentals of C #: allocating memory for a reference type on the stack

Время на прочтение 6 мин
Количество просмотров 6.2K
.NET *C# *
Перевод
This article will show you the basics of types internals, as of course an example in which the memory for the reference type will be allocated completely on the stack (this is because I am a full-stack programmer).



Disclaimer


This article does not contain material that should be used in real projects. It is simply an extension of the boundaries in which a programming language is perceived.

Before proceeding with the story, I strongly recommend you to read the first post about StructLayout, because there is an example that will be used in this article (However, as always).
Read more →
Всего голосов 7: ↑6 и ↓1 +5
Комментарии 0

Протокольно ориентированное программирование. Часть 1

Время на прочтение 10 мин
Количество просмотров 13K
Swift *

Давайте подробнее изучим тему протокольно ориентированного программирования. Для удобства разделили материал на три части.


Данный материал является комментированным переводом презентации WWDC 2016. Вопреки частому мнению о том, что вещи "под капотом" должны там и оставаться, иногда крайне полезно разобраться, что же там происходит. Это поможет использовать предмет правильно и по назначению.

Читать дальше →
Всего голосов 14: ↑14 и ↓0 +14
Комментарии 8

Go: Должен ли я использовать указатель вместо копии моей структуры?

Время на прочтение 4 мин
Количество просмотров 15K
Программирование *Go *
Перевод
image
Иллюстрация, созданная для «A Journey With Go», из оригинального гофера, созданного Рене Френч.

С точки зрения производительности систематическое использование указателей вместо копирования самой структуры для совместного использования структур многим Go разработчикам представляется наилучшим вариантом. Для того чтобы понять влияние использования указателя вместо копии структуры мы рассмотрим два варианта использования.
Читать дальше →
Всего голосов 32: ↑23 и ↓9 +14
Комментарии 27

Языковая механика стеков и указателей

Время на прочтение 10 мин
Количество просмотров 7K
Программирование *Go *
Перевод

Прелюдия


Это первая из четырех статей в серии, которая даст представление о механике и дизайне указателей, стеков, куч, escape analysis и семантики значения/указателя в Go. Этот пост посвящен стекам и указателям.

Оглавление цикла статей:

  1. Language Mechanics On Stacks And Pointers
  2. Language Mechanics On Escape Analysis (перевод)
  3. Language Mechanics On Memory Profiling (перевод)
  4. Design Philosophy On Data And Semantics

Вступление


Не буду лукавить — указатели трудны в понимании. При неправильном использовании указатели могут вызвать неприятные ошибки и даже проблемы с производительностью. Это особенно верно при написании конкурентных или многопоточных программ. Неудивительно, что многие языки пытаются скрыть указатели от программистов. Однако, если вы пишете на Go, вы не сможете избежать указателей. Без четкого понимания указателей вам будет сложно писать чистый, простой и эффективный код.
Читать дальше →
Всего голосов 8: ↑7 и ↓1 +6
Комментарии 7

Языковая механика escape analysis

Время на прочтение 9 мин
Количество просмотров 10K
Программирование *Go *
Перевод

Прелюдия


Это вторая из четырех статей в серии, которая даст представление о механике и дизайне указателей, стеков, куч, escape analysis и семантики значения/указателя в Go. Этот пост посвящен кучам и escape analysis.

Оглавление цикла статей:

  1. Language Mechanics On Stacks And Pointers (перевод)
  2. Language Mechanics On Escape Analysis
  3. Language Mechanics On Memory Profiling (перевод)
  4. Design Philosophy On Data And Semantics

Вступление


В первом посте из этой серии я рассказал основы механики указателя на примере, в котором значение распределяется по стеку между горутинами. Я не показывал вам, что происходит, когда вы разделяете значение в стеке. Чтобы понять это, вам нужно узнать о другой области памяти, где могут находиться значения: о «куче». С этим знанием вы можете начать изучать «escape analysis».
Читать дальше →
Всего голосов 7: ↑6 и ↓1 +5
Комментарии 1

Визуализация промисов и Async/Await

Время на прочтение 8 мин
Количество просмотров 30K
Разработка веб-сайтов *JavaScript *Программирование *


Доброго времени суток, друзья!

Представляю вашему вниманию перевод статьи «JavaScript Visualized: Promises & Async/Await» автора Lydia Hallie.

Приходилось ли вам сталкиваться с JavaScript кодом, который… работает не так, как ожидается? Когда функции выполняются в произвольном, непредсказуемом порядке, или выполняются с задержкой. Одна из главных задач промисов — упорядочение выполнения функций.

Мое ненасытное любопытство и бессонные ночи окупились сполна — благодаря им я создала несколько анимаций. Пришло время поговорить о промисах: как они работают, почему их следует использовать и как это делается.
Читать дальше →
Всего голосов 17: ↑17 и ↓0 +17
Комментарии 5
1