X64 что это

Содержание

X64 что это

Есть и дру­гие отли­чия от x86, но они не столь прин­ципи­аль­ны. Важ­но то, что в режиме сов­мести­мос­ти с x86 (Legacy Mode) ни 64-бит­ные регис­тры, ни новые методы адре­сации не дос­тупны! Никаки­ми средс­тва­ми (вклю­чая чер­ную и белую магию) дотянуть­ся до них нель­зя, и, преж­де чем что‑то сде­лать, необ­ходимо перевес­ти про­цес­сор в длин­ный режим (long mode), который делит­ся на два под­режима: режим сов­мести­мос­ти с x86 (compatibility mode) и 64-бит­ный режим (64-bit mode). Режим сов­мести­мос­ти пре­дус­мотрен толь­ко для того, что­бы 64-раз­рядная опе­раци­онная сис­тема мог­ла выпол­нять ста­рые 32-бит­ные при­ложе­ния.

Никакие 64-бит­ные регис­тры здесь и не ночева­ли!

Что значит X64 и X86? Какая в них разница? И имеет ли это отношение к размеру ОЗУ?

аппаратная платформа: архитектура микропроцессора и соответствующий набор инструкций, как разработанных и выпускаемых компанией Intel, так и совместимых с ними процессоров других производителей (AMD, VIA, Transmeta, WinChip и т. д.).

Источник: http://ru.wikipedia.org/wiki/X86

нет к ОЗУ нет никакого значение!
X64 это разряность системи (типа на роботу с каким процессорм розчитаное её ядро)
Х86 аппаратная платформа

Чем 64-бит версия отличается от 32-битной?
Это специальная 64-разрядная версия, разработанная для процессоров с технологиями EM64T (Pentium D, Core 2 Duo) и AMD64 (Opteron, Athlon 64) от фирм Intel и AMD соответственно. Основным достоинством системы является полноценная поддержка 4Гб RAM, а также быстрая работа с большими числами (Long Integer и Double Float). Таким образом, WinXP x64 очень эффективна при выполнении вычислений, использующих числа с плавающей запятой, необходимых в таких областях, как создание спецэффектов для кинофильмов и трёхмерной анимации или разработка технических и научных приложений. Соответственно, для реализации всего потенциала WinXP x64 потребуются 64-битные редакции программ, но даже в наше время их количество крайне невелико.Все будет работать независимо какую вы систему паставите х86 или х64,если у вас современный процессор то любая из этих платформ будет работать безупречно. Для 32-битных систем официально заявлена поддержка 4Гб RAM, однако видно только ~3,25Гб.

Почему?
Данный вопрос, пожалуй, волнует пользователей больше всего, поэтому придётся остановится на нём подробно. Всё дело в неверной формулировке. На самом деле официальное утверждение про поддержку Windows памяти до 4Гб должно звучать так: 32-битная ОС способна адресовать (указывать на ячейку памяти, к которой производится доступ) только в пределах 4Гб.

Теперь проясним ситуацию, когда в свойствах системы отображается лишь около трёх гигабайт памяти. Все устройства на компьютере адресуют память (видеокарта, звуковая карта и т.д.), потому что для разработчиков легче настроить обращение к адресу в памяти, к которому «привязано» устройство, чем возиться со специальными регистрами (портами) для обращения к этому устройству. Кроме того, обращение к памяти происходит значительно быстрее, потому что если обращаться к порту устройства, то для этого придётся ещё задействовать и центральный процессор, что в итоге приводит к серьёзным тормозам (те пользователи, у которых контроллер жёсткого диска сваливался из DMA-режима в PIO-режим, поймут, о каких тормозах идёт речь). Поэтому в своё время (1985 год, компания Intel выпускает свой знаменитый процессор 80386) было принято решение разделить доступные адреса (адресное пространство) на две части: под оперативку и под устройства, если они нуждались в адресах.

Адреса для устройств тогда поместили в конце доступного адресного пространства, отсчёт начинался с конца четвёртого гигабайта, ведь в 1985-ом году и в голову никому не могло прийти, что у кого-то будет аж четыре гига памяти!Как мы видим, системе доступно уже не 4Гб, а меньше из-за того, что часть адресов отведена под различные устройства. Как правило, конкретное число доступной оперативки варьируется из-за различных конфигураций компьютера. Иными словами, чем больше устройств в нём, тем меньше вы увидите доступной памяти в свойствах системы, однако чаще всего получается 3,25Гб. Соответственно, при установке WinXP x64 память начинает адресоваться нормально, т.е. устройства начинают размещаться за пределами первых 4Гб и поэтому видно все четыре гигабайта, ведь 64-битная система поддерживает 128Гб RAM.Часто встречается упоминание про ключ \PAE в boot.ini и про функцию memory remap в BIOS’е материнской платы, которые якобы могут помочь 32-битной ОС увидеть все 4Гб. Это правда?Объяснить про это вкратце очень сложно,на ixbt.com:Windows XP + SP2 и Windows Vista увидеть все четыре гигабайта ОЗУ (если установлены) просто не в состоянии, и изменить это нельзя. Тем, кто уже потратил свои кровные денежки на четыре гигабайтных модуля остается либо смириться, что часть их окажется неиспользованной, либо переходить на 64-разрядные версии ОС.Я установил Windows Vista и в свойствах системы у меня показываются все 4Гб!Это всего лишь маркетинговый ход.

Дело в том, что WinXP показывает объём доступной памяти, а Vista показывает сколько физически установлено памяти на компьютере. На самом же деле все ограничения WinXP x32 остались и в Windows Vista x32.

X64 что это

AMD64 (также x86-64/Intel64/EM64T/x64) — 64-битная архитектура микропроцессора и соответствующий набор инструкций, разработанные компанией AMD. Это расширение архитектуры x86 с полной обратной совместимостью. Набор инструкций x86-64 в настоящее время поддерживается процессорами AMD Athlon 64, Athlon 64 FX, Athlon 64 X2, Phenom, Turion 64, Sempron. Этот набор инструкций был лицензирован основным конкурентом AMD — компанией EM64T (Intel 64) (ранее известные как EM64T и IA-32e) в поздних моделях процессоров Pentium 4, а также в Pentium D, Pentium Extreme Edition, Celeron D, Core 2 Duo и Microsoft и Sun Microsystems используют для обозначения этого набора инструкций термин x64, однако, каталог с файлами для архитектуры в дистрибьютивах Microsoft называется amd64 (ср. i386 для архитектуры x86).

Как правильно называть

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

  • x86-64. Первоначальный вариант. Именно под этим названием фирмой AMD была опубликована первая предварительная спецификация.
  • AA-64. Так архитектуру окрестил популярный неофициальный справочник IA-64, и по-прежнему так её называющий, как AMD Architecture 64.
  • Hammer Architecture. Иногда встречалось название по первым разрабатываемым ядрам процессоров, получившим названия Clawhammer (гвоздодёр) и Sledgehammer (кувалда) иногда называемых просто Hammer (молоток).
  • AMD64. После выпуска первых Hammer’ов в названии архитектуры появилось название фирмы-разработчика Advanced Micro Devices. Сейчас является официальным для реализации AMD.
  • Yamhill Tehnology. Первое название
  • EM64T. Первое официальное название реализации Intel. Расшифровывалось как Extended Memory 64 Technology.
  • IA-32e. Иногда встречалось совместно с EM64T, чаще для обозначения длинного режима, который в документации Intel называется «режимом IA-32e».
  • Intel 64. Текущее официальное название архитектуры Intel. Постепенно Intel отказывается от наименований IA-32, IA-32e и EM64T в пользу этого названия, которое теперь является единственным официальным для этой архитектуры.
  • x64 Официальное название версий операционных систем Windows и Solaris, также используемое как название архитектуры фирмами Sun Microsystems.

На сегодняшний день наиболее распространёнными являются AMD64, x86-64 и x64. Порой упоминание AMD вводит пользователей в заблуждение, вплоть до того, что они отказываются скачивать дистрибутивы родных версий ОС, мотивируя это тем, что на их Intel-процессоре версия для AMD не пойдёт. На самом деле распространители ПО используют название amd64 лишь потому, что именно AMD была пионером в разработке этой технологии. Бывает, что пользователи путают архитектуру Intel 64 с IA-64, ошибочно скачивая ПО для этой архитектуры, и с удивлением обнаруживают, что программа не запускается.

Во избежание подобных ошибок, всегда следует помнить, что Intel 64 и . Представители Intel 64 — это Pentium 4 (последние модели), ряд моделей Celeron D, семейство Core 2 и некоторые модели Intel Atom. Представители IA-64 — это семейства Itanium 2.

Режимы работы

Процессоры архитектуры поддерживают два режима работы: Long mode («длинный» режим) и Legacy mode («наследственный», режим совместимости с x86).

Long Mode

«Длинный» режим — «родной» для процессоров AMD64. Этот режим позволяет воспользоваться всеми дополнительными возможностями, предоставляемыми архитектурой AMD64. Для использования этого режима необходима 64-битная операционная система, например, Windows XP Professional x64 Edition,Windows Vista x64 или 64-битные варианты GNU/Linux, Solaris (смешаная 32/64 сборка с разными ядрами для 32- и 64-битных процессоров), Mac OS X (смешанная 32/64 сборка с 32-битным ядром, начиная с версии 10.4.7). Этот режим позволяет выполнять 64-битные программы; также (для обратной совместимости) предоставляется поддержка выполнения 32-битного кода, например, 32-битных приложений, хотя 32-битные программы не смогут использовать 64-битные системные библиотеки, и наоборот.

Чтобы справиться с этой проблемой, большинство 64-разрядных операционных систем предоставляют два набора необходимых системных файлов: один — для родных 64-битных приложений, и другой — для 32-битных программ. (Этой же методикой пользовались ранние 32-битные системы — например, Windows 95 — для выполнения 16-битных программ). В «длинном» режиме упразднен ряд «рудиментов» архитектуры 8086, сегментированная модель памяти (однако, осталась возможность использования сегментов FS и GS, что полезно для быстрого нахождения важных данных потока при переключении задач), аппаратная мультизадачность, а также ряд команд, как реализующих упраздненные возможности, так и работающие с BCD-числами, которые в новых программах практически не использовались. Среди особенностей «длинного» режима, следует отметить тот факт, что он активируется установкой флага CR0.PG, который используется для включения страничного MMU (при условии что такое переключение разрешено (EFER.LME=1), в противном случае просто произойдет включение MMU в «наследственном» режиме). Таким образом, невозможно исполнение 64-битного кода с запрещенным страничным преобразованием.

Это создает определенные трудности в программировании, поскольку при переключении из «длинного» в «наследственный» режим и обратно (например, для вызова функций DOS, монитором виртуальной машины, и т. д.) требуется двойной сброс MMU, для чего код переключения должен находиться в тождественно отображённой странице.

Legacy Mode

Данный «наследственный» режим позволяет процессору AMD64 выполнять инструкции, рассчитанные для процессоров x86, и предоставляет полную совместимость с 32/16-битным кодом и операционными системами. В этом режиме процессор ведёт себя точно так же, как x86-процессор, например Pentium 4, и дополнительные функции, предоставляемые архитектурой AMD64 (например, дополнительные регистры) недоступны. В этом режиме 64-битные программы и операционные системы работать не будут (если, конечно, не используется виртуализация).

Особенности архитектуры

Разработанный компанией AMD набор инструкций x86-64 (позднее переименованный в AMD64) — расширение архитектуры Intel IA-32 (x86-32). Основной отличительной особенностью AMD64 является поддержка 16-ти 64-битных регистров общего назначения (против 8-и 32-битных в x86-32), 64-битных арифметических и логических операций над целыми числами и 64-битных виртуальных адресов. Для адресации новых регистров для команд введены так называемые «префиксы расширения регистра», для которых был выбран диапзон кодов 40h-4Fh, использующихся для команд INC и DEC в 32- и 16-битных режимах. Команды INC и DEC в 64-битном режиме должны кодироваться в более общей, двухбайтовой форме.

Архитектура x86_64 имеет:

  • 16 целочисленных 64-битных регистра общего назначения (RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP, R8 — R15),
  • 8 80-битных регистров с плавающей точкой (ST0 — ST7),
  • 8 64-битных регистров (MM0 — MM7, имеют общее пространство с регистрами ST0 — ST7),
  • 16 128-битных регистров
  • 64-битный указатель RIP и 64-битный регистр флагов RFLAGS.

Смерть и возрождение сегментной модели организации памяти

Разрабатывая архитектуру x86-64, инженеры корпорации AMD решили навсегда покончить с главным «рудиментом» архитектуры x86 — сегментной моделью памяти, которая передавалась по наследству ещё со времён 8086/80286. Однако, как потом оказалось, они очень погорячились. Архитектура стала абсолютно невиртуализируемой. При разработке новой версии своего продукта для виртуализации программисты компании VMWare столкнулись с непреодолимыми трудностями при реализации 64-битной виртуальной машины. Поскольку, для отделения кода монитора от кода «гостя» программой использовался механизм сегментации, эта задача стала практически неразрешимой.

Осознав свою ошибку, AMD вернула ограниченный вариант сегментной организации памяти начиная с ревизии D архитектуры AMD64, что позволило запускать 64-битные ОС в виртуальных машинах. VMWare предоставляет вместе со своими продуктами специальную утилиту. Также следует отметить, что первоначально попавшие «под нож» команды LAHF и SAHF, которые также активно используются ПО виртуализации, затем также были возвращены в систему команд. С распространением средств аппаратной виртуализации (Intel VT, AMD-V) потребность в сегментации вновь постепенно отпадет, однако VMWare по-прежнему активно её использует, и поддержки AMD-V даже на сегодняшний день в её продуктах нет.

См. также

Ссылки

  • Архитектура AMD64 (EM64T)
  • Архитектура x86-64 под скальпелем ассемблерщика
  • The world’s leading source for pure technical x86 processor information.
  • EM64T на сайте Intel
  • Документация на сайте AMD, а именно:
    • AMD64 Architecture Programmer’s Manual Volume 3: General-Purpose and System Instructions Rev 3.14
    • AMD64 Architecture Programmer’s Manual Volume 4: 128-Bit Media Instructions Rev 3.10 (SSE)
    • AMD64 Architecture Programmer’s Manual Volume 5: 64-Bit Media and x87 Floating-Point Instructions Rev 3.09 (FPU, MMX)
    • и другие

    Wikimedia Foundation . 2010 .

    64-битный привет. Архитектура x86-64 под скальпелем ассемблерщика

    X64 что это

    Что такое разрядность (битность) Windows и зачем она нужна [x32, x64, x86]

    32-бит­ная эпо­ха ухо­дит в прош­лое, сда­ваясь под натис­ком новых идей и плат­форм. Оба флаг­мана рын­ка (Intel и AMD) пред­ста­вили 64-бит­ные архи­тек­туры, откры­вающие дверь в мир боль­ших ско­рос­тей и про­изво­дитель­ных ЦП. Это нас­тоящий про­рыв — новые регис­тры, новые режимы работы… поп­робу­ем с ними разоб­рать­ся? Мы рас­смот­рим архи­тек­туру AMD64 (она же x86-64) и покажем, как с ней бороть­ся.

    64-бит­ный лей­бл — зву­чит воз­бужда­юще, но в прак­тичес­ком пла­не это все­го лишь хит­рый мар­кетин­говый трюк, скры­вающий не толь­ко дос­тоинс­тва, но и недос­татки. Нам дарова­ны 64-бит­ные опе­ран­ды и 64-бит­ная адре­сация. Казалось бы, лиш­ние раз­ряды кар­ман не тянут и если не при­годят­ся, то по край­ней мере не помеша­ют. Так ведь нет! С рос­том раз­ряднос­ти уве­личи­вает­ся и дли­на машин­ных команд, а зна­чит, вре­мя их заг­рузки/декоди­рова­ния и раз­меры прог­раммы, поэто­му для дос­тижения не худ­шей про­изво­дитель­нос­ти 64-бит­ный про­цес­сор дол­жен иметь более быс­трую память и более емкий кеш.

    Это раз.

    64-бит­ные целочис­ленные опе­ран­ды ста­новят­ся юза­бель­ны толь­ко при обра­бот­ке чисел поряд­ка 2^33 + (8 589 934 592) и выше. Там, где 32-бит­ному про­цес­сору тре­бует­ся нес­коль­ко так­тов, 64-бит­ный справ­ляет­ся за один. Но где ты видел такие чис­ла в домаш­них и офис­ных при­ложе­ниях? Не зря же инже­неры из Intel пош­ли на сок­ращение раз­ряднос­ти АЛУ (ариф­метико‑логичес­кого устрой­ства), ширина которо­го в Pentium 4 сос­тавля­ет все­го 16 бит, про­тив 32 бит в Pentium III. Это не зна­чит, что Pentium 4 не может обра­баты­вать 32-раз­рядные чис­ла.

    Может. Толь­ко он тра­тит на них боль­ше вре­мени, чем Pentium III. Но, пос­коль­ку про­цент под­линно 32-раз­рядных чисел (то есть таких, что исполь­зуют свы­ше 16 бит) в домаш­них при­ложе­ниях отно­ситель­но невысок, про­изво­дитель­ность пада­ет нез­начитель­но. Зато ядро содер­жит мень­ше тран­зисто­ров, выделя­ет мень­ше теп­ла и луч­ше работа­ет на повышен­ной так­товой час­тоте — в целом эффект положи­тель­ный.

    64-бит­ная раз­рядность… Помилуй! Адре­совать 18 446 744 073 709 551 616 байт памяти не нуж­но даже Microsoft’у со все­ми его гра­фичес­кими заворо­тами! Из 4 Гбайт адресно­го прос­транс­тва Windows Processional и Windows Server толь­ко 2 Гбайт выделя­ют при­ложе­ниям.

    3 Гбайт выделя­ет лишь Windows Advanced Server, и не потому, что боль­ше выделить невоз­можно! x86-про­цес­соры с лег­костью адре­суют вплоть до 16 Гбайт (по 4 Гбайт на код, дан­ные, стек и кучу), опять‑таки обхо­дясь минималь­ной перес­трой­кой опе­раци­онной сис­темы! Почему же до сих пор это не было сде­лано? Почему мы сидим на жал­ких 4 Гбайт, из которых реаль­но дос­тупны толь­ко два?! Да потому, что боль­ше никому не нуж­но!

    Сис­тему, адре­сующую 16 Гбайт, прос­то так не про­дашь, кого эти гигабай­ты инте­ресу­ют? Вот 64 бита — сов­сем дру­гое дело! Это осве­жает! Вот все вок­руг них и тан­цуют.

    Срав­нивать 32- и 64-бит­ные про­цес­соры бес­смыс­ленно. Если 64-бит­ный про­цес­сор на домаш­нем при­ложе­нии ока­зыва­ется быс­трее, то отнюдь не за счет сво­ей 64-бит­ности, а бла­года­ря совер­шенно незави­симым от нее конс­трук­тивным ухищ­рени­ям, на которых инже­неры едва не разор­вали себе зад­ницы!

    В чем разница между WINDOWS x86 и WINDOWS x64 (разрядность ОС Виндовс)

    X64 что это

    Впро­чем, не будем о грус­тном. 64 бита все рав­но вой­дут в нашу жизнь. Для некото­рых задач они очень даже ничего. Вот, нап­ример, крип­тогра­фия. 64 бита — это же 8 байт!

    8-сим­воль­ные пароли мож­но пол­ностью умес­тить в один регистр, не обра­щаясь к памяти, что дает неверо­ятный резуль­тат! Ско­рость перебо­ра уве­личи­вает­ся чуть ли не на порядок! Ну так чего же мы ждем? Впе­ред!

    На штурм 64-бит­ных вер­шин!

    Что нам понадобится?

    Нам пот­ребу­ется 64-раз­рядная опе­раци­онная сис­тема. Дотянуть­ся до 64-бит­ных регис­тров и про­чих вкус­ностей x86-64-архи­тек­туры мож­но толь­ко из спе­циаль­ного 64-раз­рядно­го режима (long mode). Ни под реаль­ным, ни под 32-раз­рядным защищен­ным x86-режимом они не дос­тупы. И хотя мы покажем, как перевес­ти про­цес­сор из реаль­ного в 64-раз­рядный режим, соз­дание пол­нофун­кци­ональ­ной опе­раци­онной сис­темы не вхо­дит в наши пла­ны, а без нее никуда!

    Те­перь перей­дем к под­готов­ке инс­тру­мен­тария. Как минимум нам понадо­бит­ся ассем­блер и отладчик. Мы будем исполь­зовать FASM. Он бес­пла­тен, работа­ет под Linux, Windows и MS-DOS, под­держи­вает x86-64 и обла­дает удоб­ным син­такси­сом.

    Прак­тичес­ки во все x86-64-пор­ты Linux вхо­дит GNU Debugger, которо­го для наших задач впол­не дос­таточ­но. Обла­дате­ли Windows могут вос­поль­зовать­ся Microsoft Debugger.

    Обзор x86-64

    За под­робным опи­сани­ем x86-64-архи­тек­туры луч­ше все­го обра­тить­ся к фир­менной докумен­тации AMD64 Technology — AMD64 Architecture Programmer’s Manual Volume 1:Application Programming. Мы же огра­ничим­ся толь­ко бег­лым обзо­ром основных новов­ведений.

    На­конец‑то AMD сжа­лилась над нами и подари­ла прог­раммис­там то, чего все так дол­го жда­ли. К семи регис­трам обще­го наз­начения (вось­ми — с уче­том ESP) добави­лось еще восемь, в резуль­тате чего их общее количес­тво дос­тигло 15 (16) штук.

    Ста­рые регис­тры, рас­ширен­ные до 64 бит, получи­ли име­на RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP, RIP и RFLAGS. Новые регис­тры оста­лись безымян­ными и прос­то про­нуме­рова­ны от R8 до R15. Для обра­щения к млад­шим 8, 16 и 32 битам новых регис­тров мож­но исполь­зовать суф­фиксы b, w и d. Нап­ример, R9 — это 64-раз­рядный регистр, R9b — его млад­ший байт (по ана­логии с AL), а R9w — млад­шее сло­во (то же самое, что AX в EAX). Пря­мых нас­ледни­ков AH, к сожале­нию, не наб­люда­ется, и для манипу­ляции со сред­ней частью регис­тров при­ходит­ся извра­щать­ся со сдви­гами и матема­тичес­кими опе­раци­ями.

    Ре­гистр, ука­затель команд RIP, теперь адре­сует­ся точ­но так же, как и все осталь­ные регис­тры обще­го наз­начения. Прог­раммис­ты, зас­тавшие живую PDP-11 (или ее оте­чес­твен­ный клон — «Элек­тро­нику БК», или УКНЦ), толь­ко през­ритель­но хмык­нут: наконец‑то до раз­работ­чиков ста­ли доходить оче­вид­ные исти­ны, которые на всех нор­маль­ных плат­формах были реали­зова­ны еще неиз­вес­тно ког­да.

    Возь­мем прос­тей­ший при­мер: заг­рузим в регистр AL опкод сле­дующей машин­ной коман­ды. На x86 при­ходит­ся пос­тупать так.

    Заг­рузка опко­да сле­дующей машин­ной коман­ды в клас­сичес­ком x86

    call $ + 5 ; Запихнуть в стек адрес следующей команды и передать на нее управление
    pop ebx ; Вытолкнуть из стека адрес возврата
    add ebx , 6 ; Скорректировать адрес на размер команд pop/ add/ mov
    mov al , [ ebx ] ; Теперь AL содержит опкод команды NOP
    NOP ; Команда, чей опкод мы хотим загрузить в AL

    Это же умом поехать мож­но, пока все это напишешь! И еще здесь очень лег­ко оши­бить­ся в раз­мере команд — при­ходит­ся вычис­лять его вруч­ную либо заг­ромож­дать лис­тинг никому не нуж­ными мет­ками. К тому же неиз­бежно зат­рагива­ется стек, что в ряде слу­чаев нежела­тель­но или недопус­тимо (осо­бен­но в защит­ных механиз­мах, наш­пигован­ных анти­отла­доч­ными при­ема­ми).

    А теперь перепи­шем тот же самый при­мер на x86-64.

    Заг­рузка опко­да сле­дующей машин­ной коман­ды на x86-64

    mov al , [ rip ] ; Загружаем опкод следующей машинной команды
    NOP ; Команда, чей опкод мы хотим загрузить в AL

    Кра­сота! Толь­ко сле­дует пом­нить, что RIP всег­да ука­зыва­ет на сле­дующую, а отнюдь не текущую инс­трук­цию! К сожале­нию, ни Jx RIP, ни CALL RIP не работа­ют. Таких команд в лек­сиконе x86-64 прос­то нет.

    Но это еще что! Исчезла абсо­лют­ная адре­сация! Если нам надо изме­нить содер­жимое ячей­ки памяти по кон­крет­ному адре­су, на x86 мы пос­тупа­ем приб­лизитель­но так:

    dec byte ptr [ 666h ] ; Уменьшить содержимое байта по адресу 666h на единицу

    Под x86-64 тран­сля­тор выда­ет ошиб­ку ассем­бли­рова­ния, вынуж­дая нас при­бегать к фик­тивно­му базиро­ванию:

    xor r9 , r9 ; Обнулить регистр r9
    dec byte ptr [ r9 + 666h ] ; Уменьшить содержимое байта по адресу 0+666h на единицу

    Есть и дру­гие отли­чия от x86, но они не столь прин­ципи­аль­ны. Важ­но то, что в режиме сов­мести­мос­ти с x86 (Legacy Mode) ни 64-бит­ные регис­тры, ни новые методы адре­сации не дос­тупны! Никаки­ми средс­тва­ми (вклю­чая чер­ную и белую магию) дотянуть­ся до них нель­зя, и, преж­де чем что‑то сде­лать, необ­ходимо перевес­ти про­цес­сор в длин­ный режим (long mode), который делит­ся на два под­режима: режим сов­мести­мос­ти с x86 (compatibility mode) и 64-бит­ный режим (64-bit mode). Режим сов­мести­мос­ти пре­дус­мотрен толь­ко для того, что­бы 64-раз­рядная опе­раци­онная сис­тема мог­ла выпол­нять ста­рые 32-бит­ные при­ложе­ния.

    Никакие 64-бит­ные регис­тры здесь и не ночева­ли!

    Ре­аль­ная 64-бит­ность оби­тает толь­ко в 64-bit long mode, о котором мы и будем говорить.

    Hello, world на x86-64

    Прог­рамми­рова­ние под 64-бит­ную вер­сию Windows мало чем отли­чает­ся от тра­дици­онно­го, толь­ко все опе­ран­ды и адре­са по умол­чанию 64-раз­рядные, а парамет­ры API-фун­кций переда­ются боль­шей частью через регис­тры, а не через стек. Пер­вые четыре аргу­мен­та всех API-фун­кций переда­ются в регис­трах RCX, RDX, R8 и R9 (регис­тры перечис­лены в поряд­ке сле­дова­ния аргу­мен­тов, край­ний левый аргу­мент помеща­ется в RCX). А уж осталь­ные парамет­ры кла­дут­ся в стек. Все это называ­ется x86-64 fast calling conversion (сог­лашение о быс­трой переда­че парамет­ров для x86-64), под­робное опи­сание мож­но най­ти в статье The history of calling conventions, part 5 amd64.

    Так­же советую заг­лянуть на стра­нич­ку бес­плат­ного ком­пилято­ра Free PASCAL и под­нять докумен­тацию по спо­собам вызова API.

    Присоединяйся к сообществу «Xakep.ru»!

    Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее

    X64 что это

    Крис Касперски

    Известный российский хакер. Легенда ][, ex-редактор ВЗЛОМа. Также известен под псевдонимами мыщъх, nezumi (яп. 鼠, мышь), n2k, elraton, souriz, tikus, muss, farah, jardon, KPNC.

    Похожие статьи

    • X 86 64

      Содержание X86-64 Как правильно называть Режимы работы Long Mode Legacy Mode Особенности архитектуры Смерть и возрождение сегментной модели организации…

Оставить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Что будем искать? Например,Человек

Мы в социальных сетях