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

Microsoft отказалась патчить Windows XP

Время на прочтение 1 мин
Количество просмотров 2.3K
Информационная безопасность *
К удивлению специалистов по безопасности, компания Microsoft отказалась патчить недавно выявленную уязвимость TCP/IP в Windows XP и Windows 2000. Один из ведущих менеджеров по безопасности программ Microsoft Эдриан Стоун сказал, что этот фрагмент исходников слишком стар, имеет возраст от 12 до 15 лет, и разобраться в коде на этом уровне «просто нереально» [backporting that level of code is essentially not feasible]. Данная фраза была сказана в прямом эфире ежемесячного вебкаста по безопасности (стенограмма), отвечая на вопросы слушателей.

Два бага в стеке TCP/IP были обнаружены 8 сентября. Уязвимость затрагивает также Windows Vista, Windows Server 2003 и Windows Server 2008. Для трёх упомянутых систем вышел апдейт MS09-048, а вот к Windows 2000 и Windows XP патча можно не ждать. Для защиты от вредоносных TCP/IP-пакетов пользователям Windows XP рекомендовано воспользоваться функционалом встроенного файрвола.

Нужно напомнить, что Windows XP — самая популярная в мире ОС на сегодняшний день. По условиям пользовательского соглашения, Microsoft обязана выпускать апдейты безопасности для Windows XP вплоть до апреля 2014 г., пишет Computerworld.

Отказ патчить найденную уязвимость для системы, которая находится на поддержке — довольно редкое явление. По словам Стоуна, последний раз Microsoft шла на такой шаг в марте 2003 года с Windows NT 4.0.
Всего голосов 99: ↑71 и ↓28 +43
Комментарии 168

Причины, по которым 64-битные программы требуют больше стековой памяти

Время на прочтение 5 мин
Количество просмотров 26K
Блог компании Intel

В форумах люди часто упоминают, что 64-битные версии программ поглощают больший объем памяти и стека. При этом обычно ссылаются на то, что размеры данных стали в 2 раза больше. Однако это необоснованное утверждение, так как размер большинства типов (char, short, int, float) в языке Си/Си++ остался прежним на 64-битных системах. Конечно, например, увеличился размер указателей, но ведь не все данные в программе состоят из указателей. Причины роста потребляемой памяти и стека более сложны. Я решил подробнее исследовать данный вопрос.

В данной заметке я поговорю о стеке, а в будущем планирую обсудить выделение памяти и размер двоичного кода. И еще хочу сразу заметить, что статья посвящена языку Си/Си++ и среде разработки Visual Studio.

Различия в использовании стека Win32 и Win64 приложениями
Всего голосов 85: ↑81 и ↓4 +77
Комментарии 31

Не зная брода, не лезь в воду. Часть вторая

Время на прочтение 8 мин
Количество просмотров 8.9K
Блог компании PVS-Studio
Ужасный printf
В этот раз я хочу поговорить о функции printf. Все наслышаны об уязвимостях в программах, и что функции наподобие printf объявлены вне закона. Но одно дело знать, что лучше не использовать эти функции. А совсем другое — понять почему. В этой статье я опишу две классических уязвимости программ, связанных с printf. Хакером после этого вы не станете, но, возможно, по-новому взгляните на свой код. Вдруг, вы реализуете аналогичные уязвимые функции, даже не подозревая об этом.

СТОП. Подожди читатель, не проходи мимо. Я знаю, что ты увидел слово printf. И уверен, что автор статьи сейчас расскажет банальную историю о том, что функция не контролирует типы передаваемых аргументов. Нет! Статья будет не про это, а именно про уязвимости. Заходи почитать.
Читать дальше →
Всего голосов 141: ↑129 и ↓12 +117
Комментарии 84

Структуры данных, PHP

Время на прочтение 9 мин
Количество просмотров 78K
PHP *
Туториал
Перевод
Данный пост является переводом и предназначен для новичков. Ну или для тех, кто забыл лекции с начальных курсов своих вузов. Скорее всего, данный материал уже попадался на хабре в той или иной модификации, но здесь упор на PHP и его особенности.

Структуры данных или Абстрактный Тип Данных (ADT) — это модель, определенная как некий набор операций, которые могут быть применены к самой себе и ограничена тем, какой результат дают эти операции.
Большинство из нас сталкиваются со стеком и очередью в повседневной жизни, но что общего между очередью в супермакете и структурой данных? В этом мы и попробуем разобраться в данной статье, где также будут описаны деревья.

http://www.thisiscolossal.com/2013/01/a-wooden-domino-tree-by-qiu-zhijie/



UPD: s01e02

Осторожно, трафик! Очень много текста!
Всего голосов 57: ↑44 и ↓13 +31
Комментарии 17

M-LAG как альтернатива STP и стека

Время на прочтение 4 мин
Количество просмотров 32K
Блог компании МУК
Recovery mode


Одними из основных проблем в сети являются «петли» и «единая точка отказа».

Традиционным способом победить «петли» является использование протокола STP. Но в то же время этот протокол приносит проблему неэффективного использования пропускной способности портов и линков коммутатора. При наличии нескольких возможных линков, активным будет один, все-равно, что купить домой крутой и дорогой компьютер для игры в пасьянс «Косынку» — не используется весь потенциал устройства. Низкая сходимость, особенно в сложных топологиях. А если в сети бегает голос или потоковое видео? Путь между двумя соседними коммутаторами может идти через корневой – не оптимально.

Традиционным способом уйти от «единой точки отказа» и сделать сеть отказоустойчивой является использование стека. Не поспоришь, вариант хорош, но все-равно возникает ряд вопросов: какое будет время сходимости при выходе из строя master-node? Хватит ли пропускной способности стека между коммутаторами (хотим больше скорость – платим больше)? Как себя будет вести стек при “split-brain”? Об этом под катом.
Читать дальше →
Всего голосов 13: ↑13 и ↓0 +13
Комментарии 24

Настольная игра для самых маленьких программистов (от 7 лет)

Время на прочтение 2 мин
Количество просмотров 56K
Блог компании Мосигра Программирование *Разработка игр *
Мы тут весь год общались с детскими психологами и вообще много думали о теме детского образования. Как один из результатов — сделали игру на развитие логики.



В общем, юному программисту нужно будет написать стек действий для таксиста. Чтобы довезти пассажира куда надо с первого раза. Сразу говорю — можно играть и с 4-5 лет. Как обычно, если ребёнок — сын инженера, смело вычитайте 2 года из минимального возраста.
Читать дальше →
Всего голосов 95: ↑88 и ↓7 +81
Комментарии 76

Большое обзорное тестирование языков программирования

Время на прочтение 9 мин
Количество просмотров 66K
Занимательные задачки Программирование *Компиляторы *
Из песочницы
Недавно очередной раз отработал со студентам 2-го курса 2-семестровую дисциплину «Алгоритмические языки». Обзорно рассмотрели несколько дюжин языков программирования. Один из студентов, Вадим Шукалюк, захотел получше с ними познакомиться, получить более четкое представление о каждом из них. Посоветовал ему провести небольшое исследование. Чем и увлёк. Предлагаю свой отчёт по проделанной за несколько месяцев вместе с ним работе.

У каждого языка программирования есть свои достоинства и недостатки. Одна из важнейших характеристик транслятора с любого языка — это скорость исполнения программ. Очень трудно или даже невозможно получить точную оценку такой скорости исполнения. Ресурс http://benchmarksgame.alioth.debian.org/ предлагает игровую форму для проверки такой скорости на разных задачах. Но число языков, представленных на этом ресурсе, довольно невелико. Предельную ёмкость стека, критическую величину для рекурсивных вычислений проверить проще, но она может меняться в разных версиях транслятора и быть зависимой от системных настроек.

Тестировались следующие трансляторы: си (gcc, clang, icc), ассемблер (x86, x86-64), ява (OpenJDK), паскаль (fpc), яваскрипт (Google Chrome, Mozilla Firefox), лисп (sbcl, clisp), эрланг, хаскель (ghc, hugs), дино[1], аук (gawk, mawk, busybox), луа, рубин, бейсик (gambas, libre office), питон-2, пи-эйч-пи, постскрипт (gs), пролог (swipl, gprolog), перл, метапост, ТEХ, тикль, бэш. Исследовались как собственно скорость исполнения нескольких небольших, но трудоёмких алгоритмов, так и:

  • качество оптимизации некоторых трансляторов;
  • особенности при работе с процессорами Intel и AMD;
  • предельное число рекурсивных вызовов (ёмкость стека).

Читать дальше →
Всего голосов 50: ↑25 и ↓25 0
Комментарии 59

Структуры данных. Неформальный гайд

Время на прочтение 6 мин
Количество просмотров 162K
Программирование *Алгоритмы *
Перевод


Конечно, можно быть успешным программистом и без сакрального знания структур данных, однако они совершенно незаменимы в некоторых приложениях. Например, когда нужно вычислить кратчайший путь между двумя точками на карте, или найти имя в телефонной книжке, содержащей, скажем, миллион записей. Не говоря уже о том, что структуры данных постоянно используются в спортивном программировании. Рассмотрим некоторые из них более подробно.
Читать дальше →
Всего голосов 91: ↑83 и ↓8 +75
Комментарии 31

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

Время на прочтение 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

Знакомьтесь, loop fracking

Время на прочтение 15 мин
Количество просмотров 13K
Assembler *Компиляторы *C *
image

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

Автор назвал эту технику “loops fracking” по аналогии с, например, “loops unrolling” или “loops nesting”. Тем более, что термин отражает смысл и не занят.
Читать дальше →
Всего голосов 19: ↑18 и ↓1 +17
Комментарии 29

Суперскалярный стековый процессор: скрещиваем ужа и ежа

Время на прочтение 11 мин
Количество просмотров 13K
Анализ и проектирование систем *Assembler *Компиляторы *C *

В данной статье мы будем разрабатывать (программную) модель суперскалярного процессора с OOO и фронтендом стековой машины.
Читать дальше →
Всего голосов 16: ↑16 и ↓0 +16
Комментарии 16

Суперскалярный стековый процессор: продолжаем скрещивать ужа и ежа

Время на прочтение 6 мин
Количество просмотров 7.7K
Анализ и проектирование систем *Компиляторы *C *

Продолжение статьи, где удалось продемонстрировать, что фронтенд стековой машины вполне позволяет спрятать за ним суперскалярный процессор с OoO.
Тема данной статьи — вызов функций.
Читать дальше →
Всего голосов 12: ↑12 и ↓0 +12
Комментарии 3

Суперскалярный стековый процессор: подробности

Время на прочтение 7 мин
Количество просмотров 8.5K
Анализ и проектирование систем *Компиляторы *C *


Продолжение серии статей, разбирающих идею суперскалярного процессора с OoO и фронтендом стековой машины.
Тема данной статьи — вызов функций, вид изнутри.
Читать дальше →
Всего голосов 12: ↑12 и ↓0 +12
Комментарии 3

Суперскалярный стековый процессор: оптимизация

Время на прочтение 6 мин
Количество просмотров 6.1K
Анализ и проектирование систем *Assembler *Компиляторы *C *

Продолжение серии статей, разбирающих идею суперскалярного процессора с
OoO и фронтендом стековой машины. Тема данной статьи — оптимизация обращений к памяти.

Предыдущие статьи:
1 — описание работы на линейном куске
2 — вызов функций, сохраняем регистры
3 — вызов функций, взгляд изнутри
Читать дальше →
Всего голосов 11: ↑10 и ↓1 +9
Комментарии 0

Обратная польская нотация: как же приготовить хот-дог?

Время на прочтение 4 мин
Количество просмотров 52K
Алгоритмы *
Из песочницы
Будучи дилетантом в области разработки приложений, я испытал сложности с пониманием алгоритма работы обратной польской нотации, а если быть точнее — алгоритма подготовки стека. Делу так же мало помогли статьи в «интернетах».

Все началось с того, что я затеял создание несложного интерпретатора для собственного проекта. Для решения сложных выражений на выбор было два алгоритма: рекурсивный спуск и обратная польская запись. Очевидная простота и подход к решению задачи (а может и само название) позволили последнему стать предметом для изучения.

Делу помогли две статьи. Одна из них на википедии, а вторая была написана замечательным пользователем хабра, GORKOFF, который объяснил все буквально «на пальцах».

Однако до конца я так и не понял тот важный вопрос: как же построить стек?
Читать дальше →
Всего голосов 18: ↑11 и ↓7 +4
Комментарии 6

Советские «Эльбрусы» — обзор архитектуры

Время на прочтение 28 мин
Количество просмотров 21K
Анализ и проектирование систем *Проектирование и рефакторинг *Компиляторы *Реверс-инжиниринг *
image

Про предмет статьи ходит много домыслов — от «русский Барроуз» до «не имеющий аналогов». Вызвано это в немалой степени отсутствием (доступной) полноценной документации, немногочисленным кругом лиц, имевших с ними дело да и немалым временем, прошедшим с тех пор. «Эльбрус» превратился в один из мифов ушедшей эпохи.

С другой стороны, вычислительный комплекс несомненно существовал и показывал отличные для своего времени результаты. Возможно, благодаря скудости элементной базы, которая принуждала разработчиков к выдумыванию разного рода архитектурных трюков. Многие из этих трюков сейчас выглядят архаично, а некоторые достаточно актуальны.

Так что автор из свойственной ему любознательности попытался разобраться с доступной документацией и составить более — менее цельную картину. Если читателю это интересно — добро пожаловать под кат.
Читать дальше →
Всего голосов 50: ↑50 и ↓0 +50
Комментарии 39

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

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

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

Про память, теги и когерентность

Время на прочтение 20 мин
Количество просмотров 8K
Анализ и проектирование систем *Компиляторы *C *

Тегированная память (tagged architecture) даёт экзотическую возможность отделить данные от метаданных. Цена за это не столь уж и велика (на первый взгляд), а потенциальные возможности впечатляют. Под катом попробуем разобраться.
Читать дальше →
Всего голосов 8: ↑8 и ↓0 +8
Комментарии 25

О стеке простыми словами — для студентов и просто начинающих

Время на прочтение 8 мин
Количество просмотров 245K
C++ *
Из песочницы

Привет, я студент второго курса технического университета. После пропуска нескольких пар программирования по состоянию здоровья, я столкнулся с непониманием таких тем, как «Стек» и «Очередь». Путем проб и ошибок, спустя несколько дней, до меня наконец дошло, что это такое и с чем это едят. Чтобы у вас понимание не заняло столько времени, в данной статье я расскажу о том что такое «Стек», каким образом и на каких примерах я понял что это такое.

Читать дальше →
Всего голосов 33: ↑8 и ↓25 -17
Комментарии 27

Нарушаем стек в STM8

Время на прочтение 5 мин
Количество просмотров 4.5K
Программирование микроконтроллеров *
Из песочницы
В процессе написания загрузчика STM8uLoader для микроконтроллеров STM8 возникла необходимость измерить глубину стека.

Зададимся вопросами:

  • Что будет если попытаться поместить в стек больше информации чем его глубина?
  • Что будет если попытаться извлечь из стека больше информации чем поместили?
  • Что будет если инициализировать указатель стека SP адресом выходящим за границы стека?
Читать дальше →
Всего голосов 18: ↑17 и ↓1 +16
Комментарии 7
1