Рубрика «x86» - 7

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. Особенности взаимодействия - 1
Тема оптимизации Android-приложений под платформу х86 не сходит со страниц нашего блога. Сегодня мы посмотрим на проблему под несколько специфическим углом. Портируются ли под Intel… вирусы? В чем заключаются нюансы функционирования антивирусов на разных платформах? С какими проблемами встречаются разработчики антивирусного ПО на пути оптимизации? С этими вопросами обратились к команде лаборатории Касперского, разрабатывающей антивирус для Android.
Читать полностью »

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

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

Единственным техническим требованием для базового адреса EXE является кратность 64 КБ. Но некоторые варианты базового адреса лучше, чем другие.

Цель выбора базового адреса состоит в минимизации вероятности, что модули будут перемещены. Это означает, что следует предотвратить столкновение 1) с другими объектами, которые уже в адресном пространстве (что и вызовет перемещение); 2) а также с объектами, которые могут появиться в адресном пространстве позже (форсируя их перемещение). Для исполняемых файлов избегать конфликта с объектами, которые могут появиться позже, означает уход из района адресного пространства, который может быть заполнен библиотеками DLL. Поскольку сама операционная система помещает файлы DLL в старшие адреса и базовым адресом по умолчанию для несистемных DLL является is 0x10000000, то базовый адрес для EXE должен быть где-то младше 0x10000000, и чем младше, тем больше места останется до того, как вы начнёте конфликтовать с библиотеками. Но насколько низко нужно заходить?
Читать полностью »

Путешествие по Стеку. Часть 1

В предыдущих материалах мы рассмотрели размещение программы в памяти – одну из центральных концепций, касающихся выполнения программ на компьютерах. Теперь обратимся к стеку вызовов – рабочей лошадке большинства языков программирования и виртуальных машин. Нас ожидает знакомство с удивительными вещами вроде функций-замыканий, переполнений буфера и рекурсии. Однако всему свое время – в начале нужно составить базовое представление о том, как работает стек.
Читать полностью »

image Знаете ли вы, что ровно половина разработчиков мобильных игр используют в своих творениях движок Unity? А то, что у Unity 2.9 миллионов зарегистрированных разработчиков? На самом деле знать это совсем не обязательно — это нужно маркетологам Unity, а вот для создателей игр эта информация — бесполезная.

Читать полностью »

Page кэш, или как связаны между собой оперативная память и файлы

Ранее мы познакомились с тем, как ядро управляет виртуальной памятью процесса, однако работу с файлами и ввод/вывод мы опустили. В этой статье рассмотрим важный и часто вызывающий заблуждения вопрос о том, какая существует связь между оперативной памятью и файловыми операциями, и как она влияет на производительность системы.
Читать полностью »

Вряд ли сейчас кого-то удивишь тем, что развитием архитектуры IA-32 занимается не только Intel, но и такие компании, как AMD и VIA. Больше информации можно найти, например, в статье A. Fog'a. Сегодня я планирую рассказать об одном, на мой взгляд, не до конца продуманном изменении ISA, внесенном компанией AMD.

http://technology.desktopnexus.com/wallpaper/911325

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

В Apportable SDK добавлена поддержка х86Неделю назад вышла очередная версия платформы Apportable SDK с примечательным номером 1.1.11. Но еще более примечательно в нем другое. Для тех, кто не в курсе, Apportable SDK — довольно интересный инструмент, позволяющий собирать приложения под Android из кода на С++ или Objective-C, изначально написанного для iOS. Очевидно, что наиболее востребован Apportable SDK для создания кросс-платформенных игр. В SDK поддерживаются разнообразные игровые движки, а получаемое приложение является 100% нативным, не требующим никаких дополнительных сред или эмуляций.
Читать полностью »

Android с 64 битным ядром от Intel в вопросах и ответах
Слухи о том, что компания Intel готовит 64-битную версию Android, оптимизированную под ее процессоры, ходили уже довольно давно, да и сама корпорация на последних этапах не делала из этого секрета: так, совершенно прямое тому подтверждение прозвучало на недавнем форуме IDF, проходившем в китайском Шенжене. Однако информации было слишком мало, чтобы выносить ее на Хабра обсуждение – другими словами, обсуждать было еще нечего. Теперь это уже не так: у нас есть и информация о проделанной работе, и, самое главное, прямые ссылки для скачивания нового продукта. Имеющуюся информацию мы решили оформить в виде вопросов и ответов.
Читать полностью »

Привет, %username%!
Декодирование IA-32 кода — задача архисложная. Чтобы в этом убедиться, можете обратиться к Intel Software Development Manual или к статьям, ранее написанным на хабре: Префиксы в системе команд IA-32, Правильно ли работает ваш дизассемблер?. Давайте посмотрим, как с этой задачей борется функционально точный полноплатформенный симулятор Wind River Simics, позволяющий создать высокопроизводительное виртуальное окружение, в котором любая электронная система, начиная с одной платы и заканчивая целыми многопроцессорными, многоядерными и даже многомашинными системами, может быть определена, разработана и запущена.
Как справиться с IA 32 кодом или особенности декодера SimicsБольшинство библиотек для декодирования IA-32 инструкций генерируют или используют таблицы соответствия между кодами операций и инструкциями. Пример использования данного подхода описан в статье Дизассемблер своими руками. Однако декодирование префиксов и аргументов обычно написано руками: libopcodes, metasm, beaengine, distorm. Данный подход обладает существенным недостатком — добавление поддержки новых наборов команд потребует большого количества ручной работы.
Существуют и другие способы создания декодеров, например с помощью языка GDSL. Данный подход является универсальным и позволяет создавать декодеры для любых архитектур.
Simics же использует совершенно другой не менее универсальный подход для работы с IA-32 инструкциями, названный раздельным декодированием. Также Simics имеет возможность использования внешних декодеров, но об этом немного позже.
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js