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

Microsoft добавит эмуляцию 64-битных приложений на Windows 10 для ARM-систем

Разработка мобильных приложений *Разработка под Windows Phone *Разработка под Windows *
image

Microsoft объявила, что добавит эмуляцию x64-приложений для ARM-систем на Windows 10. Компания пообещала, что эмуляция x64 появится в ноябре, сначала ее опробуют инсайдеры. Для широкого круга пользователей она станет доступной в 2021 году.
Читать дальше →
Всего голосов 7: ↑7 и ↓0 +7
Просмотры 6.1K
Комментарии 26

Google gears успешно скомпилировался для Firefox 3.5 под Linux

Firefox
Гугл пока не выложил обновления, но в svn сорс уже собирается, после некоторых танцев и небольшого патча. Выкладываю версию-0.5.25.0 для Linux 64 и 32. и патч. Проверено работает на opensuse 11.1 с фоксом проинсталленым из репозиторев.

Для x86_64:
uploaded.ivlis.com/gears-linux-x86_64-opt-0.5.25.0.xpi
(md5: 6d517d64e8ca4408b2d75572f501c3e1)

Для i386:
uploaded.ivlis.com/gears-linux-opt-0.5.25.0_0.xpi
(md5: 9da04e7e04ea9bbb41c52f9d3d7b57eb)

Для osX (Спасибо kovpas):
kovpas.ru/ggears/gears-osx-opt-0.5.25.0.xpi

Как собирать:
Всего голосов 42: ↑34 и ↓8 +26
Просмотры 736
Комментарии 32

Eclipse и Windows 64

Чулан
После приобретения нового ноута (его обзор на Хабре) с установленной 64разрядной Windows 7 встал вопрос о миграции процесса Eclipse разработки. Если с workspac'ами все прошло вполне безболезненно, то сама платформа преподнесла неприятный сюрприз:
на основной странице для скачивания различных редакции Eclips'а не доступна 64 разрядная версия для Windows.
Читать дальше →
Всего голосов 7: ↑4 и ↓3 +1
Просмотры 299
Комментарии 6

64 бита

Блог компании Intel

Статья раскрывает смысл термина «64 бита». В статье кратко рассмотрена история развития 64-битных систем, описаны наиболее распространенные на данный момент 64-битные процессоры архитектуры Intel 64 и 64-битная операционная система Windows.
Читать дальше →
Всего голосов 126: ↑108 и ↓18 +90
Просмотры 73K
Комментарии 82

64-битная Haiku и порт OpenJDK уже не за горами

Open source *
Recovery mode
Из песочницы
Алекс Смит, студент Haiku GSoC 2012, сообщает, что добился существенного прогресса в работе над портированием ядра Haiku на платформу x86_64. Вся функциональность ядра, за исключением дебаггера, уже доступна, также он портировал некоторые драйверы, включая PCI, драйверы дисков, BFS и PS/2 ввод. Для большинства драйверов портирование заключалось в исправлении ошибок компилятора. С другими были проблемы, связанные с 64-битной разрядностью, что сделало их портирование более проблематичным.
Читать дальше →
Всего голосов 36: ↑33 и ↓3 +30
Просмотры 2.2K
Комментарии 18

Подмена обработчика системного вызова

Assembler *
Из песочницы
Всем доброго времени суток! Я студентка-второкурсница технического ВУЗа. Пару месяцев назад пришла пора выбирать себе тему курсового проекта. Темы типа калькулятора меня не устраивали. Поэтому я поинтересовалась, есть ли что-нибудь более интересное, и получила утвердительный ответ. «Подмена обработчика системного вызова» — вот моя тема.

Введение

Обработчик прерываний (или процедура обслуживания прерываний) — специальная процедура, вызываемая по прерыванию для выполнения его обработки. Эти обработчики вызываются либо по аппаратному прерыванию, либо соответствующей инструкцией в программе, и обычно предназначены для взаимодействия с устройствами или для осуществления вызова функций операционной системы (wiki).

Зачем?

Главная цель, пожалуй, наглядно на рабочей системе посмотреть как оно работает, а не «грызть» сухую теорию. Ну, или как раньше программисты пытались «делать многозадачность» в DOS, переопределяя обработчик событий таймера.
Читать дальше →
Всего голосов 52: ↑47 и ↓5 +42
Просмотры 9K
Комментарии 32

Префиксы в системе команд IA-32

Блог компании Intel Программирование *
Сегодня я хочу рассказать вам о префиксах в системе команд Intel IA-32 в 32- и 64-битных вариантах (также именуемых как x86 и x86_64). Но для начала напомню вкратце общую структуру IA-32 инструкции:



  • Префиксы. Могут отсутствовать. Может присутствовать сразу несколько.
  • Опкод. Может состоять из одного, двух или трех байтов.
  • Mod_R/M байт. Используется для адресации операндов. Может отсутствовать в кодировке, если инструкция не имеет явных операндов.
  • SIB (Scale Index Base) байт. Второй байт, использующийся для адресации операндов в памяти. Может отсутствовать.
  • Байт смещения адреса (англ. displacement). 1, 2, 4 или ни одного байта.
  • Константа (англ. immediate). 1, 2, 4 или ни одного байта.

Читать дальше →
Всего голосов 26: ↑24 и ↓2 +22
Просмотры 14K
Комментарии 11

Правильно ли работает ваш дизассемблер?

Блог компании Intel Ненормальное программирование *
Сегодня я хочу рассказать об одной интересной сложности декодирования/дизассемблирования IA-32 инструкций.

Перед прочтением этой статьи рекомендую обратиться в статье «Префиксы в системе команд IA-32», описывающей общую структуру IA-32 команды и существующие префиксы. В этой статье я подробнее расскажу про обязательные префиксы (англ. mandatory prefixes) и некоторые нюансы, связанные с ними.
Читать дальше →
Всего голосов 49: ↑47 и ↓2 +45
Просмотры 13K
Комментарии 18

Десять имён для одной архитектуры

Блог компании Intel

На пятничном семинаре учебного проекта лаборатории МФТИ-Интел один из студентов задал мне примерно такой вопрос: а почему 64-битный вариант архитектуры процессоров Intel называется x64, а 32-битный — x86? Я начал объяснять, что не всё так просто. Захотелось нарисовать более полную картину. Ведь на самом деле это не x64, и даже не x86.
Читать дальше →
Всего голосов 112: ↑102 и ↓10 +92
Просмотры 121K
Комментарии 51

Android NDK, Revision 10 поддерживает архитектуру Intel 64-bit

Блог компании Intel Программирование *Разработка под Android *
Хорошая новость для разработчиков приложений под Android: новая, десятая версия Android NDK, вышедшая в июле, содержит целых три новых 64-битных ABI: arm64-v8a, x86_64 и mips64, что благоприятным образом скажется на производительности программ. Нам особенно приятно отметить появившуюся поддержку x86_64, ведь команда Intel, естественно, принимала в этой работе участие. К слову сказать, интерфейс х86 также был доработан, в частности, добавлена поддержка инструкций SSSE3. Компилятором по умолчанию для 64-битных платформ является GCC 4.9. Еще одно важное изменение: GDB обновился до версии 7.6.
И еще — Android NDK и этот блог имеют кое-что общее. А именно, начиная с этой версии, NDK автоматически умеет переводить код ARM NEON intrinsic функций в x86 intrinsics. А автор соответствующего кода — редактор блога Intel — Vikky13.
Полный список изменений.
Всего голосов 22: ↑20 и ↓2 +18
Просмотры 6.7K
Комментарии 17

Расширенные инструкции процессора в .NET или «C# Intrinsics»

Ненормальное программирование *.NET *C# *
В шахматных программах широко используются «битовые доски» (битборды 1, 2) для представления фигур на доске. А так же и для других игр на той же доске 8×8, и даже для карточных игр. С битбордами часто проводят различные операции, например, найти первый установленный бит или посчитать количество установленных битов. Для этих операций придумано много «хитрых» алгоритмов, а на современных процессорах некоторые из этих операций доступны в расширенном наборе инструкций. Например, popcnt, доступный в SSE4.2 ABM. Также есть пара инструкций bsf/bsr, которые доступны уже давно, но из JIT-компилятора к ним нет никакого доступа.
Конечно, всё серьёзные шахматные программы пишут на C++, но для прототипирования каких-нибудь алгоритмов хочется использовать C#, потому что я с ним лучше знаком и у меня меньше шансов выстрелить себе в ногу. Но производительность тоже не хочется терять просто так, в C/C++ интересующие нас инструкции доступны так называемые встроенные функции. Я попробовал сделать подобное решение и для C#.
Читать далее
Всего голосов 32: ↑31 и ↓1 +30
Просмотры 16K
Комментарии 10

Return oriented programming. Собираем exploit по кусочкам

Информационная безопасность *Системное программирование *
Tutorial
Введение
В этой статье мы попробуем разобраться как работает Return Oriented эксплоит. Тема, в принципе, так себе заезженная, и в инете валяется немало публикаций, но я постараюсь писать так, чтобы эта статья не была их простой компиляцией. По ходу нам придется разбираться с некоторыми системными особенностями Linux и архитектуры x86-64 (все нижеописанные эксперименты были проведены на Ubuntu 14.04). Основной целью будет эксплуатирование тривиальной уязвимости gets с помощью ROP (Return oriented programming).
Читать дальше →
Всего голосов 39: ↑38 и ↓1 +37
Просмотры 26K
Комментарии 4

[CppCon 2017] Matt Godbolt: Что мой компилятор сделал для меня?

Программирование *C++ *Компиляторы *Отладка *
Tutorial

Продолжение цикла обзорных статей с конференции CppCon 2017.



На этот раз очень интересное выступление от автора Compiler Explorer (godbolt.org). Обязательно читать всем, кто для быстроты умножает на 2 с помощью сдвига (по крайней мере, на x86-64). Если вы знакомы с ассемблером x86-64, то можете перемотать до разделов с примерами ("Умножение", "Деление" и т.д). Далее слова автора. Мои комментарии в квадратных скобках курсивом.


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


Всего голосов 31: ↑31 и ↓0 +31
Просмотры 17K
Комментарии 3

Перезагрузка текстур OpenGLESv2 через DMABUF

Программирование *Разработка игр *Разработка под Android *Разработка на Raspberry Pi *

В этой статье я хочу рассказать, как просто можно обновлять текстуры OpenGLES через DMABUF. Поискал по Хабру и к своему удивлению не обнаружил ни одной статьи на эту тему. В Хабр Q&A тоже ничего такого не нашел. И это для меня немного странно. Технология появилась довольно давно, хотя информации о ней действительно в сети не много, вся она расплывчатая и противоречивая.

Я всю эту информацию собирал по крупицам из разных источников, прежде чем смог написать вот такой видео плеер, как на демке выше. Здесь, на демке, мой самописный видео плеер, основанный на библиотеке gstreamer, загружает видео кадры в текстуру OpenGLESv2 каждый раз перед рендерингом. Работает на Raspberry Pi4. Кадры просто копируются в специальным образом выделенную память — а уж DMA переносит их в память GPU, в текстуру. Далее расскажу, как я это делал.
Всего голосов 12: ↑12 и ↓0 +12
Просмотры 2.4K
Комментарии 13

Что нужно знать, если вы хотите вызывать Go функции из ассемблера

Ненормальное программирование *Assembler *Системное программирование *Компиляторы *Go *
You've run into a really hairy area of asm code.
My first suggestion is not try to call from assembler into Go. — Ian Lance Taylor

До тех пор, пока ваш ассемблерный код делает что-то простое, всё выглядит неплохо.


Как только у вас возникает задача вызвать из ассемблерного кода Go функцию, один из первых советов, который вам дадут: не делайте так.


Но что если вам это очень-очень нужно? В таком случае, прошу под кат.


Читать дальше →
Всего голосов 28: ↑25 и ↓3 +22
Просмотры 4.8K
Комментарии 14

.NET Core: интринсики x86_64 на виртуальных машинах

.NET *Виртуализация *C# *
Мы живём в эпоху доминирования архитектуры x86. Все x86-совместимые процессоры похожи, но и все при этом немного отличаются. И не только производителем, частотой и количеством ядер.

Архитектура x86 за время своего существования (и популярности) пережила много крупных апдейтов (например, расширение до 64 бит — x86_64) и добавлений «расширенных наборов инструкций». К этому приходится подстраиваться и компиляторам, которые по-умолчанию генерируют максимально общий для всех процессоров код. Но среди расширенных инструкций есть много интересного и полезного. Например, в шахматных программах часто используются инструкции для работы с битами: POPCNT, BSF/BSR (или более свежие аналоги TZCNT/LZCNT), PDEP, BSWAP и т.д.

В компиляторах C и C++ явный доступ к таким инструкциям реализован через «присущие (intrinsic) данному процессору функции». пример1 пример2

Для .NET и C# такого удобного доступа не существовало, поэтому когда-то давно я сделал свою обёртку, которая предоставляла эмуляцию таких функций, но если CPU их поддерживал, то заменяла их вызов прямо в вызывающем коде. Благо, большинство нужных мне интринсиков помещались в 5 байт опкода CALL. Подробности можно почитать на хабре по этой ссылке.

С тех пор прошло много лет, в .NET нормальных интринсиков так и не появилось. Но вышел .NET Core, в котором ситуацию исправили. Сначала появились векторные инструкции, в потом и почти весь* набор System.Runtime.Intrinsics.X86.
* — нет «устаревших» BSF и BSR

И всё вроде-бы стало хорошо и удобно. Если не считать того, что определение поддержки каждого набора инструкций всегда было запутанным (какие-то включаются сразу наборами, для каких-то есть отдельные флаги). Так .NET Core запутало нас ещё сильнее с тем, что между «разрешёнными» наборами есть ещё и какие-то зависимости.
Читать дальше →
Всего голосов 19: ↑19 и ↓0 +19
Просмотры 5K
Комментарии 1

Сколько инструкций процессора использует компилятор?

Assembler *Компиляторы *Визуализация данных *Статистика в IT Процессоры
Месяц назад я попытался сосчитать, сколько разных инструкций поддерживается современными процессорами, и насчитал 945 в Ice Lake. Комментаторы затронули интересный вопрос: какая часть всего этого разнообразия реально используется компиляторами? Например, некто Pepijn de Vos в 2016 подсчитал, сколько разных инструкций задействовано в бинарниках у него в /usr/bin, и насчитал 411 — т.е. примерно треть всех инструкций x86_64, существовавших на тот момент, не использовались ни в одной из стандартных программ в его ОС. Другая любопытная его находка — что код для x86_64 на треть состоит из инструкций mov. (В общем-то известно, что одних инструкций mov достаточно, чтобы написать любую программу.)

Я решил развить исследование de Vos, взяв в качестве «эталонного кода» компилятор LLVM/Clang. У него сразу несколько преимуществ перед содержимым /usr/bin неназванной версии неназванной ОС:

  1. С ним удобно работать: это один огромный бинарник, по размеру сопоставимый со всем содержимым /usr/bin среднестатистического линукса;
  2. Он позволяет сравнить разные ISA: на releases.llvm.org/download.html доступны официальные бинарники для x86, ARM, SPARC, MIPS и PowerPC;
  3. Он позволяет отследить исторические тренды: официальные бинарники доступны для всех релизов начиная с 2003;
  4. Наконец, в исследовании компиляторов логично использовать компилятор и в качестве подопытного объекта :-)

Начну со статистики по мартовскому релизу LLVM 10.0:
ISA Размер бинарника Размер секции .text Общее число инструкций Число разных инструкций
AArch64   97 МБ 74 МБ 13,814,975 195
ARMv7A 101 МБ 80 МБ 15,621,010 308
i386 106 МБ 88 МБ 20,138,657 122
PowerPC64LE 108 МБ 89 МБ 17,208,502 288
SPARCv9 129 МБ 105 МБ 19,993,362 122
x86_64 107 МБ 87 МБ 15,281,299 203
В прошлом топике комментаторы упомянули, что самый компактный код у них получается для SPARC. Здесь же видим, что бинарник для AArch64 оказывается на треть меньше что по размеру, что по общему числу инструкций.

А вот распределение по числу инструкций:
Читать дальше →
Всего голосов 93: ↑92 и ↓1 +91
Просмотры 32K
Комментарии 226

Сэмулируй сборку приложения ARM на x86 процессоре на примере Qt

*nix *Виртуализация *Qt *Разработка под Linux *
Tutorial
Мощность современных процессоров растёт, как в стационарных компьютерах, так и в различных embedded устройствах, на борту которых процессоры на базе ARM с операционной системой linux. Сегодня в рамках данной статьи мы запустим эмулятор процессора ARM на x86 компьютере и в нём попробуем собрать Qt из исходников и тестовое приложение, т.е. так сказать сиэмулируем сборку ARM приложения.

В первой части статьи будем использовать эмулятор QEMU для aarch64, во второй части запустим эмулятор Raspberry и проверим работоспособность приложения в нём.

От себя хочу отметить, это все делается не быстро, и если Вы попробуете все это выполнить, то полный цикл займет у вас несколько дней!)


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

ARM серверы — более производительные и более дешёвые

Высокая производительность *Серверная оптимизация *Серверное администрирование *Хранение данных *
Из песочницы

В этом году Apple потрясла рынок десктопных процессоров чипом Apple M1 и устройствами на нём. Похожее событие произошло в мире облачных вычислений в прошлом году. AWS выпустили новый тип сервера на собственных ARM процессорах Graviton2. По заявлениям Amazon, соотношение производительности к цене у новых процессоров на 40% выше, чем у аналогов на x86. Ещё одно недавнее обновление - сервера Amazon RDS (облачный сервис, предоставляющий сервера баз данных) на Graviton2. Я запустил несколько бенчмарков и нагрузочный тест реального бэкенд приложения, чтобы проверить настолько ли хороши сервера на ARM процессорах и узнать какие проблемы совместимости могут возникнуть.

Читать далее
Всего голосов 24: ↑22 и ↓2 +20
Просмотры 19K
Комментарии 13
1