Pull to refresh
1
0
Send message

Реверс-инжиниринг микропроцессора Intel 8086

Reading time6 min
Views26K
В июне 1978 года был представлен один из самых влиятельных чипов в полупроводниковой индустрии – Intel 8086. Он положил начало архитектуре х86, которая до сих пор доминирует сегодня в настольных и серверных вычислениях. Давайте заглянем вглубь чипа и разберём внутреннее строение и архитектурные особенности этого микропроцессора.

image

На фото ниже изображён кристалл процессора Intel 8086. На фото виден металлический слой чипа, скрывающий кремний под ним. По краям матрицы расположены тонкие провода, обеспечивающие соединение между площадками на чипе и внешними контактами. Силовые и заземляющие площадки имеют по два соединительных провода для поддержания более высокого тока. Микросхема была очень сложной для своего времени и содержала 29 тысяч транзисторов. Обратите внимание на маркировку кристалла в самом низу – на ней указан логотип Intel, модель процессора и год изготовления микросхемы.

image
Кристалл процессора Intel 8086

image

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

image

Читать дальше →
Total votes 43: ↑43 and ↓0+43
Comments185

volatile vs. volatile

Reading time10 min
Views8.9K
Всем привет! Мы подготовили перевод данной статьи в преддверии старта курса «Разработчик C++»




Повесть о двух, казалось бы, похожих, но все же разных инструментах

Херб — автор бестселлеров и консультант по вопросам разработки программного обеспечения, а также архитектор ПО в Microsoft. Вы можете связаться с ним на www.gotw.ca.



Что означает ключевое слово volatile? Как его следует использовать? К всеобщему замешательству, существует два распространенных ответа, потому что в зависимости от языка, на котором вы пишете код, volatile относится к одной из двух различных техник программирования: lock-free программированию (без блокировок) и работе со «необычной» памятью. (См. Рисунок 1.)


Рисунок 1: повесть о двух технических требованиях.

Усугубляет путаницу и то, что эти два различных случая использования имеют частично совпадающие предпосылки и накладываемые ограничения, что заставляет их выглядеть более схожими, нежели они являются на самом деле. Давайте же четко определим и поймем их, и разберемся, как их правильно употреблять в C, C++, Java и C# — и всегда ли именно как volatile.
Читать дальше →
Total votes 20: ↑17 and ↓3+14
Comments9

Стандартизация разработки ПО

Reading time9 min
Views13K
«Первый шаг к совершенствованию — это стандартизация. Там, где нет норм, не может быть улучшения.»

Канбан и точно вовремя на Toyota

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

Выводы и практические рекомендации, о которых я пишу, получены из моего опыта стандартизации в одном из крупнейших IT-разработчиков в России. Поэтому все названия вымышлены, а совпадения случайны.

В тексте вы встретите некоторые термины из фронтенда, в котором я работаю последние несколько лет, пусть вас это не смущает, сами принципы применимы и в других направлениях разработки.
Читать дальше →
Total votes 14: ↑11 and ↓3+8
Comments40

Анализ кристалла сдвигового регистра у математического сопроцессора 8087

Reading time11 min
Views8.9K
Числа с плавающей запятой необходимы для научного программирования, однако первые процессоры напрямую поддерживали лишь операции с целыми числами. Но ранние микропроцессоры всё же могли производить операции с числами с плавающей запятой. Такие операции просто разбивались на множество целочисленных, манипуляции с экспонентой и дробной частью. Иначе говоря, поддержка плавающей запятой не сделала возможной операции с ней в принципе – она просто серьёзно их ускорила. Существует ещё один способ представления нецелых чисел – это числа с фиксированной запятой, у которых есть неизменное количество цифр после десятичного разделителя. С ними работать проще, однако с их помощью можно представить диапазон заметно меньшего размера.

Хотя операции с плавающей запятой на мейнфреймах были обычным делом уже в 1950-х и 1960-х годах, только в 1980-м Intel представила сопроцессор с плавающей запятой 8087 для микрокомпьютеров.

8087 не был первым чипом с поддержкой плавающей запятой. National Semiconductor представила MM57109 Number Cruncher Unit [«перемалыватель цифр»] – так его реально назвали – в 1977-м. Это был, по сути, чип от научного калькулятора на 12 цифр в новом корпусе, работающий с десятичными значениями в двоичном представлении, и требовавший ввода данных в обратной польской записи. Чип работал до абсурдного медленно: к примеру, на вычисление тангенса могло уйти до секунды. AMD представила свой первый чип с поддержкой плавающей запятой, Am9511, в 1978-м. Этот чип поддерживал 32-битные числа с плавающей запятой, и на вычисление тангенса тратил до 1,4 мс. В итоге Intel купила у AMD лицензию на Am9511 и продавала его как 8231. 8087 на 10 МГц, для сравнения, мог вычислить тангенс за 54 мкс, работая с 80-битным числом с плавающей запятой. Вот насколько быстродействие и точность 8087 были выше его предшественников.
Читать дальше →
Total votes 42: ↑41 and ↓1+40
Comments21

Важность «минусования» (downvoting) или ошибки Hacker News

Reading time6 min
Views3.2K
image

Рассказывает Джефф Этвуд, сооснователь Stack Overflow и автор Coding Horror. Эссе 2009 года.

Hacker News Пола Грэма — отличный веб-сайт, на котором можно найти полезные ссылки для программирования и разумные обсуждения. Сайт, в какой-то степени, представляет собой усовершенствованную версию Reddit. Дизайн был непосредственно разработан с целью избежать недостатков программирования reddit.com, и сделано это было не кем-то со стороны (Reddit в свое время был стартапом, профинансированным фондом Пола Грэма Y Combinator). Поэтому мы внимательно изучили данный сайт в процессе разработки Stack Overflow.

Действительно, обсуждения на Hacker News гораздо серьезнее и не такие провокационные, как своего рода анархия на reddit.com. Я лично наблюдал дискуссии, возникающие под моими статьями, опубликованными на обоих сайтах. В эссе “Чему я научился у Hacker News” (рус) Пол пишет:
Очевидно, что Теория разбитых окон применима и к интернет-сообществу. Теория заключается в том, что мелкие правонарушения порождают более серьезные: в районе, где много граффити и разбитых окон происходит больше грабежей. Я жил в Нью-Йорке, когда Джулиани предложил свои реформы, после которых теория разбитых окон стала популярной, а общественное поведение чудесным образом улучшилось. И еще я был пользователем Reddit и наблюдал абсолютно противоположную, но столь же резкую трансформацию там.
Читать дальше →
Total votes 16: ↑11 and ↓5+6
Comments31

Нечеткая логика и конечные автоматы против ПИД-регулятора. Избиение младенцев продолжается

Reading time14 min
Views22K

Продолжаем изучать нечеткую логику по книге Гостева В.И «Нечеткие регуляторы в системах автоматического управления». После того, как мы насладились прекрасными видами поверхностей отклика, перейдем непосредственно к решению очередной задачи из книги Гостева В.И «Нечеткие регуляторы в системах автоматического управления».


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


  1. Простой регулятор на базе нечеткой логики. Создание и настройка.
  2. Нечеткая логика в красивых картинках. Поверхности отклика для разных функций принадлежности.
  3. Создание регулятора на базе нечеткой логики с многоканальной настройкой.
  4. Простая нечеткая логика слеплена «из того что было» для газотурбинного двигателя.
  5. Нечеткая логика против ПИД. Скрещиваем ежа и ужа. Авиадвигатель и алгоритмы управления АЭС.


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


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


Возможно, задачи в книге специально подобраны так, что нечеткие регуляторы подходят лучше для управления, чем классический ПИД.


Далее под катом – ПИД-регулятор, нечёткая логика и конечные автоматы для управления газотурбинным двухроторным двигателем (ГТД). Тем, кто впервые планирует познакомиться с работой нечеткой логики, рекомендую начать со статьи «Простой регулятор на базе нечеткой логики. Создание и настройка»

Читать дальше →
Total votes 34: ↑33 and ↓1+32
Comments82

Основные linux-команды для новичка

Reading time14 min
Views779K
Linux — это операционная система. Как винда (windows), только более защищенная. В винде легко подхватить вирус, в линуксе это практически невозможно. А еще линукс бесплатный, и ты сам себе хозяин: никаких тебе неотключаемых автообновлений системы!

Правда, разобраться в нем немного посложнее… Потому что большинство операций выполняется в командной строке. И если вы видите в вакансии «знание linux» — от вас ожидают как раз умение выполнять простейшие операции — перейти в другую директорию, скопировать файл, создать папочку… В этой статье я расскажу про типовые операции, которые стоит уметь делать новичку. Ну и плюс пара полезняшек для тестировщиков.

Я дам кратенькое описание основных команд с примерами (примеры я все проверяла на cent os, red hat based системе) + ссылки на статьи, где можно почитать подробнее. Если же хочется копнуть еще глубже, то см раздел «Книги и видео по теме». А еще комментарии к статье, там много полезного написали)
Читать дальше →
Total votes 80: ↑65 and ↓15+50
Comments170

Взламываем Age of Empires III, чтобы изменить настройки качества шейдеров

Reading time18 min
Views25K
Начало мая 2020 года — если вы похожи на меня, то карантин заставил вас перепройти заново игры, которые не запускали долгие годы.

А если вы ещё больше похожи на меня, то у вас где-то мог заваляться диск с Age of Empires 3. Возможно, вы играете на Mac, возможно, вы ещё не обновились до Catalina и желаете покомандовать Морганом Блеком.

Итак, вы запускаете игру, попадаете в главное меню, и сразу же замечаете — что-то не так… Меню выглядит отвратительно.


Если вам интересно что же именно «отвратительно», то обратите внимание на воду. Всё остальное тоже ужасно, но это менее очевидно.


Итак, вы заходите в опции, поднимаете все параметры до максимума… Но игра по-прежнему уродлива.

Вы замечаете, что опции "Shader Quality" подозрительно заблокированы на "Low".
Читать дальше →
Total votes 56: ↑56 and ↓0+56
Comments13

Как работает атака TCP Reset

Reading time15 min
Views30K
Атака TCP reset выполняется при помощи одного пакета данных размером не более нескольких байт. Подменённый спуфингом TCP-сегмент, созданный и переданный атакующим, хитростью заставляет двух жертв завершить TCP-соединение, прервав между ними связь, которая могла быть критически важной.


Эта атака имела последствия и в реальном мире. Опасения её использования вызвали внесение изменений в сам протокол TCP. Считается, что атака является важнейшим компонентом Великого китайского файрвола («Золотого щита»), который используется китайским правительством для цензурирования Интернета за пределами Китая. Несмотря на её впечатляющую биографию, для понимания механизмов этой атаки необязательно обладать глубокими знаниями работы TCP. Разумеется, понимание её тонкостей способно многому научить вас об особенностях реализации протокола TCP, и, как мы вскоре убедимся, вы даже сможете провести эту атаку против себя при помощи одного только ноутбука.

В этом посте мы:

  • Изучим основы протокола TCP
  • Узнаем, как работает атака
  • Проведём атаку против себя при помощи простого скрипта на Python.

Прежде чем приступать к анализу механики атаки, давайте сначала посмотрим, как она используется в реальном мире.
Читать дальше →
Total votes 33: ↑32 and ↓1+31
Comments15

C++ быстрее и безопаснее Rust, Yandex сделала замеры

Reading time15 min
Views121K

Спойлер: C++ не быстрее и не медленнее и вообще смысл не в этом. Эта статья является продолжением славных традиций развенчания мифов крупных российских компаний о языке Rust. Предыдущая была "Go быстрее Rust, Mail.Ru Group сделала замеры".


Недавно я пытался заманить коллегу, сишника из соседнего отдела, на Тёмную сторону Rust. Но мой разговор с коллегой не задался. Потому что, цитата:


В 2019 году я был на конференции C++ CoreHard, слушал доклад Антона antoshkka Полухина о незаменимом C++. По словам Антона, Rust еще молодой, не очень быстрый и вообще не такой безопасный.

Антон Полухин является представителем России в ISO на международных заседаниях рабочей группы по стандартизации C++, автором нескольких принятых предложений к стандарту языка C++. Антон действительно крутой и авторитетный человек в вопросах по C++. Но доклад содержит несколько серьёзных фактических ошибок в отношении Rust. Давайте их разберём.

Total votes 230: ↑214 and ↓16+198
Comments1196

Руководство Google по стилю в C++. Часть 10

Reading time15 min
Views23K
Часть 1. Вступление

Часть 9. Комментарии
Часть 10. Форматирование
Часть 11. Исключения из правил


Эта статья является переводом части руководства Google по стилю в C++ на русский язык.
Исходная статья (fork на github), обновляемый перевод.
Читать дальше →
Total votes 13: ↑13 and ↓0+13
Comments28

Разработка прошивки для аналоговой видеокамеры EVR-Y2022F

Reading time26 min
Views5.4K
В предыдущей статье было очень подробно рассмотрено устройство аналоговой видеокамеры с целью создания собственной прошивки. Как уже было сказано, камера имеет микроконтроллер неизвестного происхождения. Он гораздо богаче, чем привычные мне AVR: у него два напряжения питания 3.3В и 1.8В, а также, у него есть функция DSP. К такому выводу я пришёл, когда задумался про реализацию алгоритма автофокусировки. Тем не менее, я не предпочитал сложные МК типа STM32 и прочие, хотя бы потому, что я с ними вообще никогда не работал. Мной однозначно было принято решение, что для реализации своей прошивки я буду применять один из МК AVR. Поэтому уже на этом этапе я начал осознавать, что с реализацией функции автофокусировки будет не очень легко справиться, а точнее – невозможно.
Читать дальше →
Total votes 33: ↑33 and ↓0+33
Comments6

IDA Pro и техники реверс-инжиниринга

Reading time27 min
Views88K

0x00 start


; {EN} entry point, do nothing, just run _main {EN}


Статья для начинающих “воинов тьмы”, тех, кто хочет погрузиться в темную сторону силы: реверс-инжиниринг. На нашем “операционном столе” будет небольшой кустарный сервер, который работает по протоколу TCP/IP. Для анализа протокола обмена данными нам поможет стандарт де-факто в области реверса — IDA Pro.


Статей по реверс-инжинирингу и по IDA Pro уже написано немало (хотя и не столько, как по PHP), но поскольку процесс реверса — исследовательский, то мысли, как с "другого боку" подойти к задаче обратной разработки, полезны новичкам. По крайней мере, как автор, я руководствовался тем, чтобы изложить основные практики и техники, о которых говорю в первые дни всем стажерам и на первых парах курса по реверс-инжинирингу в университете.


Чего не будет в статье?

Поиска уязвимостей и разработки эксплоитов для Google Chrome или Apple iPhone… Поэтому если вы исследователь со стажем и с большим количеством CVE на счету, маловероятно, что вы найдете для себя что-то новое.



"Once you start down the dark path, forever will it dominate your destiny".

Читать дальше →
Total votes 28: ↑27 and ↓1+26
Comments32

Программирование видео слоя в Raspberry Pi с использованием DispmanX API

Reading time7 min
Views4K

В этой статье я хочу продемонстрировать использование DispmanX API одноплатных компьютеров Raspberry. DispmanX API предоставляет возможность создавать на десктопе Raspberry новые отображаемые слои. Слои висят над слоями. Их можно динамически создавать, удалять, перемещать, их можно масштабировать. При этом, сам видеоконтроллер будет их объединять и отображать на экране монитора. Интересно, что слои могут иметь альфа канал, и тогда, изображения всех слоев будут сами собой смешиваться. Так же, кроме 32-ти двухбитных ARGB слоев можно создавать, например, YUV420 слои, или слои других типов. В Raspberry по умолчанию уже есть два слоя. Самый нижний содержит изображение десктопа. Весь вывод через иксы идет в этот слой. И есть второй, самый верхний слой, в котором живет изображение курсора мыши.

Я покажу, как создавать новый слой, писать в него изображение и как его перемещать по экрану. Собственно говоря, на демо видео выше и показана работа такой программы. Здесь созданы четыре новых 32-х битных слоя ARGB. В каждый из слоев я записываю пикселы из заранее подготовленных битмапов. Мои битмапы это изображения облаков, солнца и воздушных шаров. Слои перемещаются по экрану с разной скоростью, нависая над самым нижним иксовым слоем.
Total votes 21: ↑21 and ↓0+21
Comments6

С++, метапрограммирование и регистры микроконтроллера

Reading time7 min
Views7.2K

Привет, Хабр!


Вот уже несколько лет все свои проекты для линейки микроконтроллеров stm32 я делаю на C++.


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


Во избежание лишних вопросов: я использую связку QtCreator+gcc+gdb+openocd. Как с ней работать, описано многократно, поэтому не буду на этом останавливаться, а вот о своих подходах к работе с микроконтроллерами расскажу подробнее.


На нижнем уровне проекта, как правило, находятся драйвера периферии. С них и начнём.

Читать дальше →
Total votes 17: ↑16 and ↓1+15
Comments65

Как TeamViewer хранит пароли

Reading time3 min
Views24K


TeamViewer — популярная программа для удалённого доступа к рабочему столу. Поэтому довольно интересно посмотреть, как она хранит пароли. Если вкратце, пароли хранятся в реестре Windows в зашифрованном виде. Для шифрования используется алгоритм AES-128-CBC и секретный ключ 0602000000a400005253413100040000.

Такой метод сохранения паролей и связанное с ним повышение привилегий официально зарегистрированы 7 февраля 2020 года как уязвимость CVE-2019-18988 (применима ко всем версиям TeamViewer до 14.7.1965 включительно).
Читать дальше →
Total votes 31: ↑26 and ↓5+21
Comments42

Скроллбар, который не смог

Reading time7 min
Views6.7K


Недавно вышла новая версия Windows Terminal. Всё бы ничего, но работоспособность её скроллбара оставляла желать лучшего. Поэтому настало время немного потыкать в него палкой и сыграть на бубне.
Читать дальше →
Total votes 20: ↑19 and ↓1+18
Comments3

Чем больше, тем хуже или почему важен игровой цикл

Reading time4 min
Views17K


По мере эволюции геймдизайна в течение последних 20 лет, продолжительность игр постоянно увеличивалась. В The Witcher 3 легко можно наиграть сотни часов, а Factorio или Dwarf Fortress можно вообще перепроходить не один раз.

Разработчики давно преследуют идею игр с бесконечной реиграбельностью. Отсюда и появились игры-сервисы. Многие геймдизайнеры (особенно на AAA-проектах) смотрят на игровой опыт как на десятки часов геймплея. А это не всегда хорошо.
Total votes 24: ↑22 and ↓2+20
Comments8

Подробно о корутинах в C++

Reading time10 min
Views34K
Здравствуйте, коллеги.

В рамках проработки темы С++20 нам в свое время попалась уже довольно старенькая (сентябрь 2018) статья из хаброблога «Яндекса», которая называется "Готовимся к С++20. Coroutines TS на реальном примере". Заканчивается она следующей весьма выразительной голосовалкой:



«Почему бы и нет», — решили мы и перевели статью Давида Пиларски (Dawid Pilarski) под названием «Coroutines introduction». Статья вышла чуть более года назад, но, надеемся, все равно покажется вам очень интересной.
Читать дальше →
Total votes 17: ↑16 and ↓1+15
Comments19

CVE-2019-18683: Эксплуатация уязвимости в подсистеме V4L2 ядра Linux

Reading time22 min
Views7.7K

В данной статье описана эксплуатация уязвимости CVE-2019-18683 в ядре Linux, которую я обнаружил и исправил в конце 2019 года. Указанный CVE-идентификатор присвоен нескольким аналогичным ошибкам типа «состояние гонки», которые присутствовали в подсистеме V4L2 ядра Linux на протяжении пяти лет. Пятнадцатого февраля я выступил с докладом по данной теме на конференции OffensiveCon 2020 (ссылка на презентацию).


Далее я детально объясню, как работает разработанный мной прототип эксплойта (PoC exploit) для микроархитектуры x86_64. Данный эксплойт выполняет локальное повышение привилегий из контекста ядерного потока, где отсутствует отображение пользовательского адресного пространства. В статье также показано, как эксплойт для Ubuntu Server 18.04 обходит следующие средства защиты: KASLR, SMEP и SMAP.


Начнем с демонстрации работы эксплойта.


Total votes 24: ↑24 and ↓0+24
Comments6
1
23 ...

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Date of birth
Registered
Activity