LINUX.ORG.RU

4
Всего сообщений: 118

Киньте в меня учебником по современному x86 асму

Нужно быстро научиться понимать асм, хотя бы на уровне чтения выхлопа компилятора или в отладчике. Если для ARM тоже есть, кидайте. Язык учебника не важен. Заранее спасибо.

 , , ,

kookoo ()

Какой компилятор даст самый быстрый код на x86 (i386)

Clang, gcc или icc? И я никак не могу понять, что такое gcc-llvm, и в чём его отличие от gcc, как им пользоваться блин в чужих проэктах с большим файлом сборки, а не моих? Зачем этот биткод вообще там нужен, и что с ним потом делать так и не разобрался.

 , , ,

gradle ()

poll и epoll(...) и x86 WAIT/FWAIT

Подскажите, где найти реализацию poll syscall на уровне машинных команд?
Можно ли получить такой листинг с помощью gcc -S на простейшем примере кода, где есть вызов poll()?
Если нет, то какие файлы ядра посмотреть? Поглядел /usr/src/linux-source-4.9/include/linux/poll.h - там ничего, напоминающего ассемблерный код, нет.

И ещё. Как poll связан с x86-инструкцией WAIT/FWAIT? Реализован ли poll() через прерывания процессора?

Или происходит сохранение контекста процесса (нити), переключение выполнения на другой участок кода?
В процессоре 80286 или 80386 были для этого инструкции ENTER / LEAVE.

https://www.opennet.ru/man.shtml?category=2&topic=poll

 , ,

BruteForceSSL ()

Есть ли какие-либо преимущества по безопасности внутри гостя при эмуляции другой архитектуры?

Если, например, на X86 хостинге запускать qemu-system-arm с полной эмуляцией даже ядра.

Или наоборот на одноплатнике запускать bochs для эмуляции X86, когда нужен именно X86 для каких либо программ.

Но, наверно, еще лучше запускать на более редкой, чем X86 «серверной» архитектуре, например, на ARMv7 эмуляцию каких-нибудь совсем уж редких (именно для серверов) архитектур типа MIPS и т.п.? Понятно, что тормоза и более заметные, чем в OpenBSD, но секурность же так ее перетак? OpenBSD покажется супербыстрой после этого.

Повышается ли при этом безопасность в плане защиты от встроенных в процессоры закладок типа рутования гостя извне виртуалки через God mode?

Например, представим, что SSH сервер внутри ARM гостя каким-то образом закидали некими запросами (переполнение буфера и т.п.) и он попытался запустить код, который запускать не должен был с точки зрения админа.

1) Код внешней атаки был рассчитан на X86, чтобы переключиться на root с помощью год моде, а там ARM - обломс ?

2) Атакующие переделали код внешней атаки, чтобы он был рассчитан на ARM, чтобы переключиться на root с помощью год моде или какого-нибудь отладочного переключателя AllWinner, а там эмулация ARM вместо аппаратного ARM - обломс ?

3) У хостеров инфраструктура заточена на извлечение ключей из X86 гостей, а там ARM с немного другими своими структурами данных - обломс ?

Применительно к микро серверам интернет: SSH, почта, чатег и т.п.

X86 вообще позволяет запретить переход из режима 32 бита в 64 бита? VMWare Workstation 32 bit ведь умела запускать 64 битные оси, с помощью своих драйверов ядра, да.

Можно ли из QEMU ARM гостя начать общаться командами с внешним процессором X86 и даже зарутоваться к нему каким-либо образом?

 , , , ,

simoshina ()

Про PCI host bridge и 00:00.0

Чем на самом деле является присутствующее во всех x86 системах PCI устройство 00:00.0 с классом 0x060000 и как оно используется? Обычно пишется, что это хост бридж/драм контроллер, но хост бридж было бы ожидаемо увидеть как родительский узел иерархии PCI без собственного адреса на downstream шине, а при обращении процессора к памяти PCI уж точно не используется. Это какое-то устройство для доступа к регистрам настоящего моста CPU-PCI/CPU-RAM, который сам по себе «прозрачен»?

Правильно ли я понимаю, что текст в документации ядра: «For example, there's no standard hardware mechanism for enumerating PCI host bridges, so the ACPI namespace must describe each host bridge, the method for accessing PCI config space below it, the address space windows the host bridge forwards to PCI (using _CRS), and the routing of legacy INTx interrupts (using _PRT).» относится к появившемуся с появлением PCIe memory-mapped механизму взаимодействия с хост-бриджем и доступными через него устройствами, а до этого было достаточно стандартных I/O портов и APCI вообще не был необходим?

Перемещено leave из talks

 , , ,

shatsky ()

ODROID-H2 rev. B

https://www.hardkernel.com/shop/odroid-h2/ снова появился в продаже!

В отличие от других плат на J4105, здесь заявлена поддержка 32 гигабайт оперативной памяти, а не 8. Только что заказал себе экземпляр для задач подкроватного сервера. Доставка из Кореи — $40.

 , ,

commagray ()

Чо за проблемы с AVX-512?

Привет! Мне тут короче понадобилось двумерную карту флоатов в картинку, по заданной палитре, преобразовать. Если че, это видеостриминг в реалтайме.

Ну я недолго думая привинтил SSE, потом еще подумал, и прикрутил FMA3 инструкции, для более лучшей интерполяции, и для перевода сразу в YUV(линейное преобразование, умножение матрицы на вектор, то сё).

Потом еще подумал, а что это я только по 4 точки прохожу? Вобщем можно и по 8 если AVX. А то и по 16 если AVX-512.

Но тут почитал, что AVX, и особенно AVX-512 делают какую-то черную магию с процессорами, при излишнем использовании. Типа ядра замедляют или чето такое. Поясните че как? Стоит туда жать?

 , , , ,

lovesan ()

Помогите понять причины ошибок

Есть у меня такая программа, называется ExaGear - Windows Emulator для Android.

Ссылка на программу, если кто-то хочет протестить:

( Ссылка на программу, если кто-то хочет протестить )

В ней стоит Wine 3.0, оригинал, в образе ubuntu 14.04 lts x86. Ни на Wine 3.0, ни на Wine 4.0 в этом образе программы, приведённые в списке ниже, не запускаются, хотя на обычном нормальном Linux всё запускается, даже в 3.0. Вывод один: мой образ линукса какой-то испорченный, и его нужно починить, обычный linux не подходит для этого эмулятора.

1. Программа Telegram.

Запускаю, появляется окно об обновлении, жму skip, и программа закрывается, а я вижу окно «Внутренние ошибки Wine»

Скриншот:

( Скриншот )

Логи:

( Логи )

Ссылка на программу:

( Ссылка на программу )

2. Программа Rapid Environment Editor.

Программа вообще не запускается, но в логах что-то есть

Логи:

( Логи )

Ссылка на программу:

( Ссылка на программу )

3. Установщик farcry.

Установщик запускается, проходит 20 секунд, затем экран чернеет на 5 секунд, потом снова появляется окно, но уже с ошибкой

Скриншот:

( Скриншот )

Логи:

( Логи )

Ссылка на программу:

( Ссылка на программу )

Помогите, кто нибудь, исправить это всё, из-за чего могут быть эти ошибки, какой файл в Linux восстановить чтобы они пропали.

Переустановка нового чистого Wine не помогает, нативные ntdll, mscoree, quartz не помогают. Я реально не знаю что делать, на форуме winehq.org не помогают, уже неделю там ответа жду. Может хоть здесь подскажите. Мне нужно, чтобы все 3 программы запускались.

 , , , ,

masteruser82841 ()

Intel и AMD напряглись - VIA выкапывается

Компания Zhaoxin, являющаяся совместным предприятием Via Technologies и китайского правительства, представила новый CPU на архитектуре x86. Создатели отмечают, что новинка, названная KaiXian KX-6000, по производительности сравнима с CPU Intel Core i5 седьмого поколения и при этом обеспечивает на 50% большее быстродействие в сравнении с предшественником.

KaiXian KX-6000 — преемник модели KX-5000, дебютировавшей в начале года. Процессор работает на частоте до 3,0 ГГц, имеет 8 МБ кэш-памяти второго уровня, встроенный двухканальный контроллер оперативной памяти DDR4-3200, а также поддерживает все основные интерфейсы — PCIe, SATA, USB. Ключевое отличие от прежней модели касается техпроцесса: если KX-5000 производится TSMC по нормам 28 нм, то KX-6000 выпускается по технологическому процессу 16 нм FinFET.

Создатели процессора не назвали ни стоимость, ни сроки выпуска. Но судя по дорожной карте, опубликованной ранее, товарные KaiXian KX-6000 появятся в следующем году.

https://www.ixbt.com/news/2018/09/25/zhaoxin-kaixian-kx-6000-x86-3-0-16.html

https://www.anandtech.com/show/13388/zhaoxin-shows-x86-compatible-kaixian-kx6000

 , , ,

StReLoK ()

Дырень (бекдор?) в X86 процессорах VIA

Немного ассемблерной магии и полный доступ получен:
https://www.youtube.com/watch?v=GQE3a8WLeds

Для Ъ не будет, лень с видео переписывать.

 , , ,

ls-h ()

Очередная дыра

 , ,

StReLoK ()

Че пацаны 8086k?

https://www.extremetech.com/computing/270547-intel-core-i7-8086k-5ghz-boost-x...

6C/12T, 5GHz в бусте. Шерето и зонды прилагаются.

 , ,

StReLoK ()

wine ошибка: A debugger has been found running in your system...

Предыстория: Wine Stable 3.0 (i386) был установлен и настроен на ПК, затем перенесён на arm-приставку, где работает посредством эмуляции arm-x86. До недавнего времени в Wine на приставке работало .exe-приложение, затем приложение обновилось. Обновление приложения добавило поддержку Windows 10. Теперь при запуске приложения на ПК (в Wine) оно до сих пор работает, а при запуске в приставке возникает ошибка:

A debugger has been found running in your system. Please, unload it from memory and restart your program.

Лог:

0037:err:winediag:schan_imp_init Failed to load libgnutls, secure connections will not be available.
Guest application trying to set TF flag in eflags.
003c:fixme:service:svcctl_EnumServicesStatusExW resume handle not supported
003b:fixme:service:svcctl_EnumServicesStatusExW resume handle not supported

В чём может быть причина ошибки и как её устранить?

Что я пытался сделать: В эмуляторе приставки свой дистрибутив linux'а, в котором установлен Wine. Проверил наличие libgnutls - есть libgnutls26 и libgnutlsxx27. Установил libgnutls30, создал symlink 26 -> 30, 27 -> 30, 28 -> 30 и т.д. - при запуске ругается «GNUTLS_1.4 not found in libgnutls26», откатил все изменения. Проверил наличие libgcrypt - отсутствует, попытался установить libgcrypt11 - говорит «a newest version installed». Установил libgcrypt11-dev, теперь ни одно приложение не запускается и в логе нет ошибок. Снова откатил все изменения.

 ,

A27 ()

Сборка компа x86 в 2018 году

Когда ждать появления железа (камней), в которых исправлены последние уязвимости?

Сейчас покупать железо смысла особо нет, а вот планировал.

И да, давно не следил за обновлениями компьютерного железа: что там и как? Штеуд или Амуди?

 , ,

telikan ()

Какие есть альтернативы qemu-user?

Из проприетарных подходит транслятор из exagear, но в нём меня не устраивает лицензия - я не могу распространять продукт, его использующий.
В qemu не устраивает точность эмуляции - падает многопоточное приложение.
Производительность пока не сильно волнует, но желательно чтобы она была не ниже чем у qemu.
Суть такова: консольная утилита скачивается android приложением, распаковывается и запускается, ввод контроллируется java кодом.

 , , , ,

mittorn ()

VIA ожила

Довольно неожиданно в мае прошлого года появились известия о новых x86-совместимых процессорах тайваньской компании VIA Technologies. Совместно с китайской компанией Shanghai Zhaoxin Semiconductor тайваньские разработчики представили 4- и 8-ядерные интегрированные x86-совместимые процессоры ZX-C и северный мост (чипсет) ZX-100C. Эти процессоры опирались на новые вычислительные ядра Katherine (Катерина), хотя 8-ядерные решения представляли собой двухкристальную сборку на общей подложке. Это усложняет производство, но сокращает время на разработку, а со временем у китайцев не очень. Отставание от Intel и AMD надо чем-то компенсировать.

Настольные и мобильные процессоры ZX-C, как и их серверные аналоги FC-1080/1081, использовали 28-нм LP техпроцесс и выпускались на линиях китайской компании Shanghai Huali Microelectronics Corporation (HLMC). На днях стало известно, что придёт на смену ZX-C. На конференции China IC Design Conference 2017 (ICCM 2017), которая прошла в Пекине 16 и 17 ноября, представители компании Zhaoxin сообщили о завершении разработки однокристальных 4- и 8-ядерных x86-совместимых процессоров KX-5000. Эти решения также будут выпускаться с использованием 28-нм техпроцесса на заводах компании HLMC, а вот следующее поколение процессоров — KX-6000 — будет эксплуатировать техпроцесс 16 FF+ тайваньской компании TSMC. Впрочем, данных о KX-6000 пока нет, так что не будем забегать вперёд.

Процессоры Zhaoxin KX-5000 стали первыми китайскими SoC с поддержкой двухканальной памяти DDR4 (DDR4-2400). Контроллер памяти, как и видеоядра VIA, встроен в процессор. Также в SoC нашлось место аудиоконтроллеру, контроллеру PCI Express 3.0 и видеопортам HDMI, DisplayPort и VGA. Всего представленного выше достаточно для сборки вычислительной платформы с поддержкой современных SSD-накопителей.

Для расширения списка интерфейсов KX-5000 предусмотрен новый южный мост ZX-200. Чипсет добавит в платформу порты SATA 6 Гбит/с, порты USB, включая USB Type-C (в общем случае USB 3.1) и сетевой порт Gigabit Ethernet. Мост ZX-200, что надо отметить, выпускается с использованием 40-нм техпроцесса, хотя тот же мост для процессоров AMD Ryzen компании ASMedia использует 55-нм техпроцесс. Добавим, новая платформа уже сертифицирована для работы под управлением ряда китайских операционных систем и систем Windows 7 и 10. Ранее на базе процессоров Zhaoxin компания Lenovo представила ноутбук CF03-T, а компания Tsinghua Tongfang Chaoxiang серию десктопов Z8000.

https://3dnews.ru/962121/

 , ,

StReLoK ()

Делаем анти-штеуд

Как мы выяснили в другом треде, штеуд есть зонд. А что если нам сделать свой штеуд? Теоретически 130нм позволяет это сделать как по цене, так и по производительности.

Дело в том, что мну давно уже пилит свой процессор. В том числе я продумал но не до конца систему полубинарной трансляции. Почему полубинарной?

Основная проблема бинарной трансляции х86 например в арм - это несоответсвие адресов команд х86 их аналогам в армокоде. Ввести непосредственно х86 мы не можем ибо патенты. Скотинки предлагают ввести в теоретический процессор систему команд эквивалентную или расширяющую таковую но в других кодах. Этим мы обходим патент.

Физическая реализация такова: адресное пространство программы делится на несколько зон. Одна зона соответствует «обычному» режиму работы. Для х86-32 это 0-4гб. Для х86-64 это канонические адреса.

Еще одна зона используется для адресации транслированного кода. Эта зона лежит в области неканонических адресов х86-64, отличается рядом инвертированных старших битов от соответсвующих канонических адресов, а младшие биты сдвинуты влево на единицу. Таким образом, каждому байту машинного кода х86 соответствуют два байта оттранслированного кода. Процессор в режиме эмуляции х86 обращается не к фактическим адресам A которые получает фактически от программы, а к адресам (A*2) XOR K где K - это маска тех самых инвертированных старших битов. Если этим адресам соответствует страница, производится выборка байт команд из неё. Если нет - происходит исключение.

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

Из плюсов: у нас получается своя, непатентованная система команд. При этом система бинарной трансляции именно что простая. 1-в-1 или близко к тому.

Из минусов: я пока не нашел как закодировать все х86 команды, тем более х86-64. Но тут накладывается фишка чисто моей архитектуры, которую я хотел сунуть под низ.

Какие фундаментальные проблемы видны кому-либо на этом этапе?

 ,

ckotinko ()

router vs x86

Доброго времени суток.

Всю жизнь пользовался отдельно стоящими маршрутизаторами, но в последнее время все больше посещает мысль сделать маршрутизатор из домашнего сервера.

Интересует мнение адептов первого и второго пути. Кто что думает по этому поводу.

 ,

torm7 ()

Про новые архитектуры

Вот я тут смотрю дискуссии на тему рязани и штеудов и постоянно вижу упоминания неких новых архитектур.

А кто-нибудь из аналитиков на ЛОРе может нам пояснить, что принципиально нового родили инженеры штеуда и амд за последние 10 лет?

Просто я вот в своё время данный вопрос изучил, чтоб на патентную мину не наступить. Исторически, был такой дядька по фамилии Томассуло. Вот он-то как раз в 80х или даже в 70х(лень гуглить) предложил out-of-order execution. У него как раз были тем самие reservation stations, переименование регистров и прочие термины которыми нынче жонглируют. Опс, погуглил. 1967й год.

Короче, этот патент лежит у IBM под жопой. У IBM еще лежит патент на FMA - это умножение + сложение с плавающей точкой. Его тоже все используют. 191битный сумматор блаблабла. Но вернемся к нашему барану.

Так вот, на практике используют как бы томассуло, но вместо прицельного оживления упоротых инструкций, они их тупо крутят в round robin, пока все не выкрутят. Вот пень2 - 40 микроинструкций, 5 конвейеров. Ага, 40/5=степень двойки. Ну понятно. Кора7 = 128/8=16. Ожидаемо. Это томасулло, томасулло и еще раз томасулло. Смотрю на рязань, там якобы ктулхана встроили. Ну думаю, наконец то что-то новое. А там всё тот же томассуло. Ктулхан просто занимается предсказанием переходов вместо табличек.

Берем арм. Там еще проще: вместо нескольких очередей сделали одну на входе. Разница на самом деле непринципиальна.

Так-с, говорите, что там нового?

 , ,

ckotinko ()

безопасно ли читать в avx регистр концы массивов

Допустим есть такой случай

uint8_t arr[33] __attribute__((aligned(64)));
....

__m256i v = _mm256_load_si256((__m256i*) arr);
...
v = _mm256_load_si256((__m256i*) arr+32);

Безопасен ли такой код? Насколько я понимаю память на x86 выделяется страницами с минимальным размером в 4кб. А то в свою очердь означает, что читая 32 байта (256 бит) по выравненому указателю (по 64 байта - 512бит) мы не можем залезть в память другого приложения (или ядра) и получить неприятные последствия от этого.

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

 , , ,

Dudraug ()