Історія одного бага: вирівнювання даних на x86

Одного разу мені довелося вираховувати суму векторів цілих чисел.

Звучить незвично. Кому знадобиться робити це в реальному житті? Зазвичай такі обчислення зустрічаються тільки в задачках з початкової школи або бенчмарках компілятора. Але зараз це сталося насправді.

В реальності стояло завдання перевірити контрольну суму заголовків IPv4, яка є сумою обернених кодів (доповнень до одиниці) двухбайтных машинних слів. Простіше кажучи, це означає додавання всіх слів і всіх бітів перенесення, які виробляються в процесі. У цієї процедури є декілька приємних особливостей:

  • її можна ефективно виконати з допомогою процесорної інструкції
    ADC
    (на жаль, ця функція недоступна в C);
  • її можна виконати на словах будь-якого розміру (можете додати за бажанням восьмибайтные значення, тільки результат слід зменшити до двох байт і додати всі біти переповнення);
  • вона нечутлива до порядку проходження байтів (дивно, але це так).

Читати далі →

Заміна RISC машини на x86: запрошую помацати і потестувати завтра


RISC-архітектура досить довго була безальтернативною для процесингу банків та іншого відповідального хайлоада. Як тільки почалася криза, все частіше і частіше звучить думка, що x86 теж цілком може впоратися. Тепер x86 активно мацають і подекуди впроваджують. Тому що економія в рази.

Завтра, у четвер 27 жовтня, о 18:00 ми будемо знущатися над x86-машиною з інтригуючою назвою Huawei Kunlun. Приходьте потикати в нього паличкою. Будемо навантажувати його Oracle і майнингом биткоинов до тих пір, поки він, як бензопила з анекдоту, не скаже «Хррр».

Нижче — короткий FAQ про RISC-машини та програма тест-драйву.

Читати далі →

Дуже простий і швидкий HTML->TEXT

image

Всі бачили переглядач html-файлів в TotalCommander. Загорівся ідеєю написати простий і дуже маленький текстовий браузер для своєї операційки. Спочатку, дивився в бік asm-xml — відмінний парсер, проте ну дуже вже великий (мій межа — 64 кілобайти, не технічний, просто принцип такий). Нижче описаний дуже простий спосіб отримання тексту з html.


Читати далі →

Мацаємо китайське залізо і з'ясовуємо, наскільки це дешево і сердито



Не потрібно пояснювати, як санкції змінили російський ІТ-ринок. Тому що вони не так вже його поки змінили. Але, як мінімум, змінився стан душі: саме санкції породили інтерес до альтернативних брендів. В першу чергу — до китайських.



Ми вирішили ближче подивитися на досягнення китайської народної промисловості і випробувати їх в умовах типових обчислювальних задач, а заодно перевірити, як вони будуть себе вести в разі техногенних збоїв та інших актів вандалізму. Нижче історія нашого тестування продуктів компаній Inspur та Huawei.

Читати далі →

Асемблер для задач моделювання. Частина 1: гостьовий асемблер

Instructions, registers, and assembler directives are always in UPPER CASE to remind you that assembly programming is a fraught endeavor
golang.org/doc/asm
На Хабре так і в Інтернеті в цілому є досить багато інформації про використання мов асемблера для різних архітектур. Перегорнувши доступні матеріали, я виявив, що найчастіше освітлювані в них області використання асемблера і споріднених технологій наступні:
  1. Вбудовувані (embedded) системи.
  2. Декомпіляція, зворотна розробка (reverse engineering), комп'ютерна безпека.
  3. Високопродуктивні обчислення (HPC) і оптимізація програм.
І звичайно ж, в кожній з цих областей існують специфічні вимоги, а значить свої поняття про інструменти і «свій» асемблер. Эмбедщики дивляться в код через редактор і дебагер, реверс-інженери бачать його в декомпиляторах начебто IDA і radare2 і отладчиках ICE, а HPC-специ — через профилировщики, такі як Intel® VTune™ Amplifier,
xperf
або
perf
.
І мені захотілося розповісти про ще однієї області програмування, в якій ассемблеры часті супутники. А саме — про їх роль при розробці програмних моделей обчислювальних систем, в народі іменованих симуляторами.

Читати далі →

Антивірус, Android і х86. Особливості взаємодії


Тема оптимізації Android-додатків під платформу х86 не сходить зі сторінок нашого блогу. Сьогодні ми подивимося на проблему під дещо специфічним кутом. Портируются під Intel… віруси? У чому полягають нюанси функціонування антивірусів на різних платформах? З якими проблемами зустрічаються розробники антивірусного ПЗ на шляху оптимізації? З цими питаннями звернулися до команди лабораторії Касперського, що розробляє антивірус для Android.

Читати далі →

Чому 0x00400000 є базовою адресою за замовчуванням для EXE

Базовою адресою за замовчуванням для DLL є 0x10000000, але для виконуваних файлів це 0x00400000. Чому саме таке особливе значення для EXE? Що такого особливого в 4 мегабайтах?

Це має відношення до розміру адресного простору, який відображається однією таблицею сторінок в архітектурі x86, і таку конструкцію вибрали в 1987 році.

Єдиним технічним вимогою для базової адреси EXE є кратність 64 КБ. Але деякі варіанти базової адреси краще, ніж інші.

Мета вибору базової адреси полягає в мінімізації ймовірності, що модулі будуть переміщені. Це означає, що слід запобігти зіткненню 1) з іншими об'єктами, які вже в адресному просторі (що і викличе переміщення); 2) а також з об'єктами, які можуть з'явитися в адресному просторі пізніше (форсуючи їх переміщення). Для виконуваних файлів уникати конфлікту з об'єктами, які можуть з'явитися пізніше, означає відхід з району адресного простору, який може бути заповнений бібліотек DLL. Оскільки сама операційна система поміщає файли DLL в старші адреси і базовою адресою за замовчуванням для несистемних DLL є is 0x10000000, то базовий адреса для EXE повинен бути молодше 0x10000000, і чим молодше, тим більше місця залишиться до того, як ви почнете конфліктувати з бібліотеками. Але наскільки низько потрібно заходити?

Читати далі →

Подорож по стека. Частина 1

       
 
У попередніх матеріалах ми розглянули розміщення програми в пам'яті — одну з центральних концепцій, що стосуються виконання програм на комп'ютерах. Тепер звернемося до стеку викликів — робочої конячці більшості мов програмування і віртуальних машин. Нас очікує знайомство з дивовижними речами на кшталт функцій-замикань, переповнень буфера і рекурсії. Однак всьому свій час — на початку потрібно скласти базове уявлення про те, як працює стек.
 
Читати далі →

Unity Android - тепер і на x86!

    imageзнаєте ви, що рівно половина розробників мобільних ігор використовують у своїх творіннях движок Unity ? А те, що у Unity 2.9 мільйонів зареєстрованих розробників? Насправді знати це зовсім не обов'язково — це потрібно маркетологам Unity, а от для творців ігор ця інформація — даремна.
 
А от інформація реально корисна: Як було оголошено вчора, Unity3D версій 4.x і 5.x отримають нативную підтримку архітектури x86 на Android, тобто, будуть працювати на пристроях c процесорами Intel на Android OS безпосередньо, а не через бінарну трансляцію, як зараз. Причому, працювати будуть максимально швидко, так як Unity включить оптимізацію для Intel CPU (сімейство Atom) і GPU.
    
Джерело: Хабрахабр

Page-кеш, або як пов'язані між собою оперативна пам'ять і файли

       
 
Раніше ми познайомилися з тим, як ядро ​​управляє віртуальною пам'яттю процесу, однак роботу з файлами і введення / висновок ми опустили. У цій статті розглянемо важливий і часто викликає омани питання про те, який існує зв'язок між оперативною пам'яттю і файловими операціями, і як вона впливає на продуктивність системи.
 
Читати далі →