АрхитСктура x64 Ρ‡Ρ‚ΠΎ это

Π”Π΅ΡΡΡ‚ΡŒ ΠΈΠΌΡ‘Π½ для ΠΎΠ΄Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹

АрхитСктура x64 Ρ‡Ρ‚ΠΎ это. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ АрхитСктура x64 Ρ‡Ρ‚ΠΎ это. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ АрхитСктура x64 Ρ‡Ρ‚ΠΎ это. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ АрхитСктура x64 Ρ‡Ρ‚ΠΎ это. Π€ΠΎΡ‚ΠΎ АрхитСктура x64 Ρ‡Ρ‚ΠΎ это
На пятничном сСминарС ΡƒΡ‡Π΅Π±Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π»Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΈΠΈ МЀВИ-Π˜Π½Ρ‚Π΅Π» ΠΎΠ΄ΠΈΠ½ ΠΈΠ· студСнтов Π·Π°Π΄Π°Π» ΠΌΠ½Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π½ΠΎ Ρ‚Π°ΠΊΠΎΠΉ вопрос: Π° ΠΏΠΎΡ‡Π΅ΠΌΡƒ 64-Π±ΠΈΡ‚Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ процСссоров Intel называСтся x64, Π° 32-Π±ΠΈΡ‚Π½Ρ‹ΠΉ β€” x86? Π― Π½Π°Ρ‡Π°Π» ΠΎΠ±ΡŠΡΡΠ½ΡΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π½Π΅ всё Ρ‚Π°ΠΊ просто. Π—Π°Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π½Π°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ»Π½ΡƒΡŽ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½Ρƒ. Π’Π΅Π΄ΡŒ Π½Π° самом Π΄Π΅Π»Π΅ это Π½Π΅ x64, ΠΈ Π΄Π°ΠΆΠ΅ Π½Π΅ x86.

386-Ρ‹Π΅, ΠŸΠ΅Π½Ρ‚ΠΈΡƒΠΌΡ‹ ΠΈ ΠšΠΎΡ€Ρ‹

На самом Π΄Π΅Π»Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠΉ для этого Ρ„Π΅Π½ΠΎΠΌΠ΅Π½Π°, ΠΎΠΊΠΎΠ»ΠΎ сорока Π»Π΅Ρ‚ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Π½Π° сцСнС процСссорных Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΉ, Π±Ρ‹Π»ΠΎ ΠΏΡ€ΠΈΠ΄ΡƒΠΌΠ°Π½ΠΎ нСсколько. Π”Π°ΠΆΠ΅ большС, Ρ‡Π΅ΠΌ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹. Они появились ΠΈΠ· Ρ€Π°Π·Π½Ρ‹Ρ… источников ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Π² Ρ€Π°Π·Π½Ρ‹Ρ… контСкстах, Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ компаниями ΠΈ Ρ€Π°Π·Π½Ρ‹ΠΌΠΈ сообщСствами. ΠšΠΎΠ½Π΅Ρ‡Π½ΠΎ ΠΆΠ΅, это вносит Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ Π½Π΅Ρ€Π°Π·Π±Π΅Ρ€ΠΈΡ…Ρƒ.
Π― постарался здСсь ΡΠΎΠ±Ρ€Π°Ρ‚ΡŒ всС извСстныС ΠΌΠ½Π΅ названия. НС Ρ…ΠΎΡ‡Ρƒ ΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ Π΄ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΎΠ΄Π½Π° Π³Ρ€ΡƒΠΏΠΏΠ° ΠΈΠΌΡ‘Π½ Π»ΡƒΡ‡ΡˆΠ΅ Π΄Ρ€ΡƒΠ³ΠΎΠΉ, β€” мСньшС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ… Π½Π΅ станут.

8086 ΠΈ сСмСйство

Π’ 1978 Π³ΠΎΠ΄Ρƒ Π±Ρ‹Π» Π²Ρ‹ΠΏΡƒΡ‰Π΅Π½ 16-Π±ΠΈΡ‚Π½Ρ‹ΠΉ процСссор Intel, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΠΌΠ΅Π» «имя» 8086. Π—Π° Π½ΠΈΠΌ Π±Ρ‹Π»ΠΈ 8088, 80186, 80286, 80386 (плюс Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΈ), 80486 (плюс Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΈ). Π›Π΅Π³ΠΊΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ (ΠΏΠΎΡ‡Ρ‚ΠΈ) всС эти числовыС ΠΈΠΌΠ΅Π½Π° ΠΎΠΊΠ°Π½Ρ‡ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π½Π° Π΄Π²Π΅ Ρ†ΠΈΡ„Ρ€Ρ‹ 86, Ρ‡Ρ‚ΠΎ Π΄Π°Π»ΠΎ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ всСй сСрии x86. Оно ΡƒΠΊΡ€Π΅ΠΏΠΈΠ»ΠΎΡΡŒ, Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ процСссорам пСрСстали Π΄Π°Π²Π°Ρ‚ΡŒ Ρ†ΠΈΡ„Ρ€ΠΎΠ²Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π°, Π° появились Intel Pentium, Celeron, Xeon, Core, Atom ΠΈ Ρ‚.Π΄. БовмСстимыС ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π²Π΅Π½Π΄ΠΎΡ€ΠΎΠ², Ρ‚Π°ΠΊΠΈΡ… ΠΊΠ°ΠΊ IBM, AMD, Cyrix, VIA ΠΈ Ρ‚.Π΄., Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΠΏΠΈΡΡ‹Π²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ x86.
По ΠΌΠΎΠΈΠΌ наблюдСниям, x86 β€” самый популярный Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ для ΠΈΠΌΠ΅Π½ΠΈ этой Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ Π² Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚Π΅, ΡΡ‚Π°Ρ‚ΡŒΡΡ… ΠΈ ΠΏΡ€ΠΎΡ‡Π΅ΠΉ Π»ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΡƒΡ€Π΅, особСнно, ΠΊΠΎΠ³Π΄Π° Π½Π΅ стоит Π·Π°Π΄Π°Ρ‡ΠΈ Ρ‚ΠΎΡ‡Π½ΠΎ ΡΠΏΠ΅Ρ†ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Ρ€ΡΠ΄Π½ΠΎΡΡ‚ΡŒ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ΠΈΠ»ΠΈ Ρ€Π΅Ρ‡ΡŒ явным ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΠ΄Ρ‘Ρ‚ ΠΎ 32-Π±ΠΈΡ‚Π½ΠΎΠΌ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π΅.
Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ Ρ‚Π°ΠΊΠΆΠ΅ Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠΈ этого названия для 32-Π±ΠΈΡ‚Π½Ρ‹Ρ… Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ², ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠ΅ Π±ΠΎΠ»Π΅Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Π½Π°Π±ΠΎΡ€ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΡ‹Ρ… инструкций: i386, i486, i586, i686, β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, для различСния Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² сборок Π±ΠΈΠ½Π°Ρ€Π½Ρ‹Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² дистрибутивов Linux.

ΠŸΡ€ΠΈΡˆΠ΅ΡΡ‚Π²ΠΈΠ΅ 64 Π±ΠΈΡ‚

Π‘Π²ΠΎΠΈΠΌΠΈ стараниями Intel Ρ€Π°ΡΡˆΠΈΡ€ΠΈΠ»Π° машинноС слово Π² описанной Ρ€Π°Π½Π΅Π΅ сСрии процСссоров с 16 Π΄ΠΎ 32 Π±ΠΈΡ‚. Π”ΠΎΡΡ‚ΠΈΠ³Π½ΡƒΡ‚ΡŒ этой Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ 64 Π±ΠΈΡ‚ ΠΏΠΎΠΌΠΎΠ³Π»Π° компания AMD, Π² 2003 Π³ΠΎΠ΄Ρƒ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠ²ΡˆΠ°Ρ процСссор, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ Π½ΠΎΠ²Ρ‹Π΅ инструкции ΠΈ рСгистры ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ AMD64.
Для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ явно ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½Π½ΡƒΡŽ Π±ΠΈΡ‚Π½ΠΎΡΡ‚ΡŒ процСссора/ΠΊΠΎΠ΄Π°/ΠΏΠ°ΠΊΠ΅Ρ‚Π°, имя x86 стало ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ суффикс Β«64Β». Π’ΠΎΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Π΅Ρ€Π΅Π· ΠΊΠ°ΠΊΠΎΠΉ Π·Π½Π°ΠΊ Π΅Π³ΠΎ ΠΏΡ€ΠΈΠΏΠΈΡΡ‹Π²Π°Ρ‚ΡŒ Π½Π΅ Π΄ΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠ»ΠΈΡΡŒ, ΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° видишь x86_64, Π° ΠΏΠΎΡ€ΠΎΠΉ x86-64. НапримСр, Π²Ρ‹Π²ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ uname Π² Linux ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΠΎΠ΄Ρ‡Π΅Ρ€ΠΊ. НаконСц, Ρƒ ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡƒΠ²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΈ суффикс amd64 строчными Π±ΡƒΠΊΠ²Π°ΠΌΠΈ.
Intel ΠΆΠ΅ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π»Π° это Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ спСрва IA-32e, Π·Π°Ρ‚Π΅ΠΌ EM64T. Π’ настоящСС врСмя ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΡ‚Ρ€Π΅Ρ‚ΠΈΡ‚ΡŒ ΠΎΠ±Π° Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π½Π°Ρ… ΠΏΠ°ΠΊΠ΅Ρ‚ΠΎΠ², Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ ΠΈ ΠΏΡ€ΠΎΡ‡Π΅ΠΌ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π΅ΡΡ‚ΡŒ ΠΈ Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅ Π²Π²Π΅Π΄Ρ‘Π½Π½ΠΎΠ΅ Intel названиС…

Как это Π½Π°Π·Ρ‹Π²Π°Π΅Ρ‚ Intel

Π’ ΠΎΡ„ΠΈΡ†ΠΈΠ°Π»ΡŒΠ½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ 32-битная Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° ΠΈΠΌΠ΅Π΅Ρ‚ имя IA-32; Π΅Ρ‘ 64-Π±ΠΈΡ‚Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ» довольно странноС с ΠΌΠΎΠ΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния имя Intel 64. ΠŸΠΎΡ‡Π΅ΠΌΡƒ странноС β€” ΠΎΠ½ΠΎ создаёт ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π» для ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Ρ‹, ΠΊΠ°ΠΊ ΠΌΡ‹ ΡƒΠ²ΠΈΠ΄ΠΈΠΌ Π±Π»ΠΈΠΆΠ΅ ΠΊ ΠΊΠΎΠ½Ρ†Ρƒ ΡΡ‚Π°Ρ‚ΡŒΠΈ.

Компании-поставщики софта

Всё вмСстС

Π›ΠΎΠΆΠ½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π°

Как извСстно, Π·Π° свою ΡΠΎΡ€ΠΎΠΊΠ°Π»Π΅Ρ‚Π½ΡŽΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ Intel выпускала (ΠΈ выпускаСт сСйчас) Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ процСссоры IA-32. Π‘Ρ‹Π»ΠΈ ΠΈ Π΄ΠΎ сих ΠΏΠΎΡ€ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€. Они Ρ‚ΠΎΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‚ свои ΠΈΠΌΠ΅Π½Π°, ΠΈΠ½ΠΎΠ³Π΄Π° нСсколько созвучныС. ΠŸΡ€ΠΈ этом происходит ΠΏΡƒΡ‚Π°Π½ΠΈΡ†Π°, ΠΎΡ‚ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π΅Ρ€Π΅Ρ‡ΡŒ.

Intel IA-64. ЯвляСтся ΠΏΠΎΠ»Π½Ρ‹ΠΌ синонимом Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π° Β«Intel ItaniumΒ». Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для обозначСния 64-Π±ΠΈΡ‚Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹, нСсовмСстимой Π½ΠΈ с IA-32, Π½ΠΈ с 64-Π±ΠΈΡ‚Π½Ρ‹ΠΌ Π΅Ρ‘ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠΌ Π½ΠΈ ΠΏΠΎ Π½Π°Π±ΠΎΡ€Ρƒ ΠΊΠΎΠΌΠ°Π½Π΄, Π½ΠΈ ΠΏΠΎ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΠ°ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹. Π”Π°, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‚ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½Ρ‹Π΅ ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹Π΅ прослойки для запуска IA-32 ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° Π˜Ρ‚Π°Π½ΠΈΡƒΠΌΠ΅, Π½ΠΎ это β€” Ρ‚Π΅ΠΌΠ° для ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈ интСрСсного рассказа. ΠšΡΡ‚Π°Ρ‚ΠΈ, ΠΈ для Itanium Π΅ΡΡ‚ΡŒ Π΅Ρ‰Ρ‘ ΠΎΠ΄Π½ΠΎ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ β€” IPF, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΠΎΠ΅ ΠΈΠ·Ρ€Π΅Π΄ΠΊΠ° ΠΊΠ°ΠΊ суффикс.

К соТалСнию, Π»ΠΈΠ½Π΅ΠΉΠΊΠΈ Ρ‚Π°ΠΊΠΈΡ… сСмСйств процСссоров Intel, ΠΊΠ°ΠΊ i432, i860, i960 ΠΈΠ»ΠΈ Π½Π΅ Π΄ΠΎΠΆΠΈΠ»ΠΈ Π΄ΠΎ Π½Π°ΡˆΠΈΡ… Π΄Π½Π΅ΠΉ, ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΊΡ€Π°ΠΉΠ½Π΅ ΡƒΠ·ΠΊΡƒΡŽ Π½ΠΈΡˆΡƒ примСнСния. А Ρ‚ΠΎ глядишь β€” ΠΏΡ€ΠΈΡˆΠ»ΠΎΡΡŒ Π±Ρ‹ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ… Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Ρ‚ΡŒ Π΅Ρ‰Ρ‘ ΠΏΠΎ дСсятку ΠΈΠΌΡ‘Π½.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π£Ρ€ΠΎΠΊ 1. Π§Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ 64-Π±ΠΈΡ‚Π½Ρ‹Π΅ систСмы

На ΠΌΠΎΠΌΠ΅Π½Ρ‚ написания курса, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ извСстными ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π΄Π²Π΅ 64-Π±ΠΈΡ‚Π½Ρ‹Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ микропроцСссоров: IA64 ΠΈ Intel 64.

АрхитСктура Intel 64

ΠΠ΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ 64-Π±ΠΈΡ‚Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ опрСдСляСтся прилоТСниями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ большоС адрСсноС пространство. Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ это Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ сСрвСры, систСмы управлСния Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, БАПР ΠΈ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΈΠ³Ρ€Ρ‹. Π’Π°ΠΊΠΈΠ΅ прилоТСния ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ сущСствСнныС прСимущСства ΠΎΡ‚ 64-Π±ΠΈΡ‚Π½ΠΎΠ³ΠΎ адрСсного пространства ΠΈ увСличСния количСства рСгистров. МалоС количСство рСгистров, доступноС Π² ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅ΠΉ x86 Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π² Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡Π°Ρ…. Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ количСство рСгистров обСспСчиваСт Π΄ΠΎΡΡ‚Π°Ρ‚ΠΎΡ‡Π½ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ для ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

ΠŸΠΎΠ΄Ρ‡Π΅Ρ€ΠΊΠ½Π΅ΠΌ основныС достоинства Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ x86-64:

64-Π±ΠΈΡ‚Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ всС соврСмСнныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы сСйчас ΠΈΠΌΠ΅ΡŽΡ‚ вСрсии для Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ Intel 64. НапримСр, Microsoft прСдоставляСт Windows XP x64. ΠšΡ€ΡƒΠΏΠ½Π΅ΠΉΡˆΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ UNIX систСм Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ 64-Π±ΠΈΡ‚Π½Ρ‹Π΅ вСрсии, ΠΊΠ°ΠΊ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Linux Debian 3.5 x86-64. Однако это Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ вСсь ΠΊΠΎΠ΄ Ρ‚Π°ΠΊΠΎΠΉ систСмы являСтся ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ 64-Π±ΠΈΡ‚Π½Ρ‹ΠΌ. Π§Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° ОБ ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ прилоТСния Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ 32-Π±ΠΈΡ‚Π½Ρ‹ΠΌΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Intel 64 обСспСчиваСт ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ. Π’Π°ΠΊ, 64-битная вСрсия Windows ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ WoW64 (Windows-on-Windows 64), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ транслируСт Π²Ρ‹Π·ΠΎΠ²Ρ‹ 32-Π±ΠΈΡ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΊ рСсурсам 64-Π±ΠΈΡ‚Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы.

АдрСсноС пространство

Π₯отя 64-Π±ΠΈΡ‚Π½Ρ‹ΠΉ процСссор тСорСтичСски ΠΌΠΎΠΆΠ΅Ρ‚ Π°Π΄Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒ 16 экзабайт памяти (2^64), Win64 Π² настоящий ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ 16 Ρ‚Π΅Ρ€Π°Π±Π°ΠΉΡ‚ (2^44). Π­Ρ‚ΠΎΠΌΡƒ Π΅ΡΡ‚ΡŒ нСсколько ΠΏΡ€ΠΈΡ‡ΠΈΠ½. Π’Π΅ΠΊΡƒΡ‰ΠΈΠ΅ процСссоры ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ доступ лишь ΠΊ 1 Ρ‚Π΅Ρ€Π°Π±Π°ΠΉΡ‚Ρƒ (2^40) физичСской памяти. АрхитСктура (Π½ΠΎ Π½Π΅ аппаратная Ρ‡Π°ΡΡ‚ΡŒ) ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ это пространство Π΄ΠΎ 4 ΠΏΠ΅Ρ‚Π°Π±Π°ΠΉΡ‚ (2^52). Однако Π² этом случаС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ количСство памяти для страничных Ρ‚Π°Π±Π»ΠΈΡ†, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰ΠΈΡ… ΠΏΠ°ΠΌΡΡ‚ΡŒ.

Помимо пСрСчислСнных ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ, объСм памяти, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ доступСн Π² Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ вСрсии 64-Π±ΠΈΡ‚Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС Windows, зависит Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚ коммСрчСских сообраТСний ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Microsoft. Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ вСрсии Windows ΠΈΠΌΠ΅ΡŽΡ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ограничСния, прСдставлСнныС Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅.

АрхитСктура x64 Ρ‡Ρ‚ΠΎ это. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ АрхитСктура x64 Ρ‡Ρ‚ΠΎ это. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ АрхитСктура x64 Ρ‡Ρ‚ΠΎ это. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ АрхитСктура x64 Ρ‡Ρ‚ΠΎ это. Π€ΠΎΡ‚ΠΎ АрхитСктура x64 Ρ‡Ρ‚ΠΎ это

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Π°Ρ модСль Win64

Π’Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Π² Win32, Ρ€Π°Π·ΠΌΠ΅Ρ€ страниц Π² Win64 составляСт 4Кб. ΠŸΠ΅Ρ€Π²Ρ‹Π΅ 64Кб адрСсного пространства Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ наимСньший ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ адрСс- это 0x10000. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Win32, систСмныС DLL Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ Π²Ρ‹ΡˆΠ΅ 4Π“Π±.

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ компиляторов для Intel 64 Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ эффСктивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ рСгистры для ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ вмСсто использования стСка. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ Win64 Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ Ρ‚Π°ΠΊΠΎΠ³ΠΎ понятия, ΠΊΠ°ΠΊ соглашСниС ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°Ρ… (calling convention). Π’ Win32 ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·Π½Ρ‹Π΅ соглашСния: __stdcall, __cdecl, __fastcall ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π’ Win64 Π΅ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎ соглашСниС ΠΎ Π²Ρ‹Π·ΠΎΠ²Π°Ρ…. Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΊ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π² рСгистрах Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° Ρ‚ΠΈΠΏΠ° integer:

АргумСнты послС ΠΏΠ΅Ρ€Π²Ρ‹Ρ… Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅Ρ… integer ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ Π½Π° стСкС. Для float Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ XMM0-XMM3 рСгистры, Π° Ρ‚Π°ΠΊΠΆΠ΅ стСк.

Π Π°Π·Π½ΠΈΡ†Π° Π² ΡΠΎΠ³Π»Π°ΡˆΠ΅Π½ΠΈΡΡ… ΠΎ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ 64-Π±ΠΈΡ‚Π½Ρ‹ΠΉ, ΠΈ 32-Π±ΠΈΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Ссли ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ скомпилировано для 64-Π±ΠΈΡ‚Π½ΠΎΠ³ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠ°, Ρ‚ΠΎ всС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ (DLL) Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ 64-Π±ΠΈΡ‚Π½Ρ‹ΠΌΠΈ.

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ‡Π΅Ρ€Π΅Π· рСгистры являСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π½ΠΎΠ²ΡˆΠ΅ΡΡ‚Π², Π΄Π΅Π»Π°ΡŽΡ‰ΠΈΡ… 64-Π±ΠΈΡ‚Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ, Ρ‡Π΅ΠΌ 32-Π±ΠΈΡ‚Π½Ρ‹Π΅. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Ρˆ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ 64-Π±ΠΈΡ‚Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΎ Ρ‡Π΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ рассказано Π² ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅ΠΌ ΡƒΡ€ΠΎΠΊΠ΅.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

РазбираСмся Π² модСлях ΠΊΠΎΠ΄Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ x64

«Какой модСлью ΠΊΠΎΠ΄Π° ΠΌΠ½Π΅ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ?Β» β€” часто Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‰ΠΈΠΉ, Π½ΠΎ нСчасто Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌΡ‹ΠΉ вопрос ΠΏΡ€ΠΈ написании ΠΊΠΎΠ΄Π° для Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ Ρ…64. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, это довольно интСрСсная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°, ΠΈ для понимания Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠ³ΠΎ компиляторами машинного ΠΊΠΎΠ΄Π° Ρ…64 ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ прСдставлСниС ΠΎ модСлях ΠΊΠΎΠ΄Π°. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, для Ρ‚Π΅Ρ…, ΠΊΡ‚ΠΎ бСспокоится ΠΎ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π²ΠΏΠ»ΠΎΡ‚ΡŒ Π΄ΠΎ ΠΌΠ΅Π»ΡŒΡ‡Π°ΠΉΡˆΠΈΡ… ΠΊΠΎΠΌΠ°Π½Π΄, Π²Ρ‹Π±ΠΎΡ€ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠΎΠ΄Π° влияСт ΠΈ Π½Π° ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ.

Π’Π°ΠΆΠ½ΠΎΠ΅ Π·Π°ΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: эта ΡΡ‚Π°Ρ‚ΡŒΡ Π½Π΅ являСтся ΠΎΠ±ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠΌ ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»ΠΎΠΌ для Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‰ΠΈΡ…. ΠŸΠ΅Ρ€Π΅Π΄ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠ»Π΅Π½ΠΈΠ΅ΠΌ рСкомСндуСтся ΡƒΠ²Π΅Ρ€Π΅Π½Π½ΠΎΠ΅ Π²Π»Π°Π΄Π΅Π½ΠΈΠ΅ C ΠΈ ассСмблСром, Π° Ρ‚Π°ΠΊ ΠΆΠ΅ Π±Π°Π·ΠΎΠ²ΠΎΠ΅ знакомство с Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΎΠΉ Ρ…64.

Π’Π°ΠΊΠΆΠ΅ смотритС Π½Π°ΡˆΡƒ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΡƒΡŽ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡŽ Π½Π° ΡΡ…ΠΎΠΆΡƒΡŽ Ρ‚Π΅ΠΌΡƒ: Как x86_x64 адрСсуСт ΠΏΠ°ΠΌΡΡ‚ΡŒ

МодСли ΠΊΠΎΠ΄Π°. ΠœΠΎΡ‚ΠΈΠ²Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ Ρ‡Π°ΡΡ‚ΡŒ

Π’ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ Ρ…64 отсылки ΠΈ Π½Π° ΠΊΠΎΠ΄, ΠΈ Π½Π° Π΄Π°Π½Π½Ρ‹Π΅ вСдутся Ρ‡Π΅Ρ€Π΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎ-ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ (ΠΈΠ»ΠΈ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΆΠ°Ρ€Π³ΠΎΠ½ Ρ…64, RIP-ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅) ΠΌΠΎΠ΄Π΅Π»ΠΈ адрСсации. Π’ этих ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ… сдвиг ΠΎΡ‚ RIP ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ 32 Π±ΠΈΡ‚Π°ΠΌΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ случаи, ΠΊΠΎΠ³Π΄Π° ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ Π°Π΄Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒ Ρ‡Π°ΡΡ‚ΡŒ памяти ΠΈΠ»ΠΈ Π΄Π°Π½Π½Ρ‹Ρ… попросту Π½Π΅ Ρ…Π²Π°Ρ‚ΠΈΡ‚ сдвига Π² 32 Π±ΠΈΡ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΈ Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ большС Π΄Π²ΡƒΡ… Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚.

Один ΠΈΠ· способов Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ этой ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ β€” ΠΏΠΎΠ»Π½Ρ‹ΠΉ ΠΎΡ‚ΠΊΠ°Π· ΠΎΡ‚ RIP-ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠ° адрСсации Π² ΠΏΠΎΠ»ΡŒΠ·Ρƒ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ 64-Π±ΠΈΡ‚Π½ΠΎΠ³ΠΎ сдвига для всСх ссылок Π½Π° Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΊΠΎΠ΄. Однако, этот шаг обойдСтся ΠΎΡ‡Π΅Π½ΡŒ Π΄ΠΎΡ€ΠΎΠ³ΠΎ: для покрытия (довольно Ρ€Π΅Π΄ΠΊΠΎΠ³ΠΎ) случая нСвСроятно Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊ, Π΄Π°ΠΆΠ΅ ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π² Ρ€Π°ΠΌΠΊΠ°Ρ… Π²ΠΎΠΎΠ±Ρ‰Π΅ всСго ΠΊΠΎΠ΄Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ большСго Ρ‡Π΅ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ числа ΠΊΠΎΠΌΠ°Π½Π΄.

Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, компромиссом становятся ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠΎΠ΄Π°. [1] МодСль ΠΊΠΎΠ΄Π° это Ρ„ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ соглашСниС ΠΌΠ΅ΠΆΠ΄Ρƒ программистом ΠΈ компилятором, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ программист ΡƒΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ свои намСрСния ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ (ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ), Π² ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΏΠΎΠΏΠ°Π΄Π΅Ρ‚ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ. [2] МодСли ΠΊΠΎΠ΄Π° Π½ΡƒΠΆΠ½Ρ‹ для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ программист ΠΌΠΎΠ³ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ компилятору: Β«Π½Π΅ волнуйся, этот ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΏΠΎΠΉΠ΄Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² нСбольшиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ быстрыми RIP-ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Ρ€Π΅ΠΆΠΈΠΌΠ°ΠΌΠΈ адрСсации». Π‘ Π΄Ρ€ΡƒΠ³ΠΎΠΉ стороны, ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ компилятору ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅: Β«ΠΌΡ‹ собираСмся ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Π°Ρ‚ΡŒ этот ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π² большиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ поТалуйста ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ Π½Π΅Ρ‚ΠΎΡ€ΠΎΠΏΠ»ΠΈΠ²Ρ‹Π΅ ΠΈ бСзопасныС Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹Π΅ Ρ€Π΅ΠΆΠΈΠΌΡ‹ адрСсации с ΠΏΠΎΠ»Π½Ρ‹ΠΌ 64-Π±ΠΈΡ‚Π½Ρ‹ΠΌ сдвигом».

О Ρ‡Π΅ΠΌ расскаТСт эта ΡΡ‚Π°Ρ‚ΡŒΡ

ΠœΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΎ Π΄Π²ΡƒΡ… описанных Π²Ρ‹ΡˆΠ΅ сцСнариях, ΠΌΠ°Π»ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠΎΠ΄Π° ΠΈ большой ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠΎΠ΄Π°: пСрвая модСль Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ компилятору, Ρ‡Ρ‚ΠΎ 32-Π±ΠΈΡ‚Π½ΠΎΠ³ΠΎ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ сдвига Π΄ΠΎΠ»ΠΆΠ½ΠΎ Ρ…Π²Π°Ρ‚ΠΈΡ‚ΡŒ для всСх ссылок Π½Π° ΠΊΠΎΠ΄ ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½ΠΎΠΌ ΠΌΠΎΠ΄ΡƒΠ»Π΅; вторая настаиваСт Π½Π° использовании компилятором Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹Ρ… 64-Π±ΠΈΡ‚Π½Ρ‹Ρ… Ρ€Π΅ΠΆΠΈΠΌΠΎΠ² адрСсации. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, сущСствуСт Π΅Ρ‰Π΅ ΠΈ ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚, Ρ‚Π°ΠΊ называСмая срСдняя модСль ΠΊΠΎΠ΄Π°.

КаТдая ΠΈΠ· этих ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΊΠΎΠ΄Π° прСдставлСна Π² нСзависящих Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° PIC ΠΈ Π½Π΅-PIC вариациях, ΠΈ ΠΌΡ‹ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡ€ΠΈΠΌ ΠΏΡ€ΠΎ ΠΊΠ°ΠΆΠ΄ΡƒΡŽ ΠΈΠ· ΡˆΠ΅ΡΡ‚ΠΈ.

Π˜ΡΡ…ΠΎΠ΄Π½Ρ‹ΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π½Π° Π‘

Для дСмонстрации обсуТдаСмых Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ‚ΠΎΠ² я Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡΡŒ прСдставлСнной Π½ΠΈΠΆΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ Π½Π° Π‘ ΠΈ ΡΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΡŽ Π΅Π΅ с Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ модСлями ΠΊΠΎΠ΄Π°. Как ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, функция main ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ доступ ΠΊ Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ΠΌ Ρ€Π°Π·Π½Ρ‹ΠΌ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌ массивам ΠΈ ΠΎΠ΄Π½ΠΎΠΉ глобальной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠœΠ°ΡΡΠΈΠ²Ρ‹ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ двумя ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ: Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ ΠΈ Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒΡŽ. Π Π°Π·ΠΌΠ΅Ρ€ Π²Π°ΠΆΠ΅Π½ для объяснСния срСднСй ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠΎΠ΄Π° ΠΈ Π½Π΅ понадобится Π² Ρ€Π°Π±ΠΎΡ‚Π΅ с ΠΌΠ°Π»ΠΎΠΉ ΠΈ большой модСлями. Π’ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π²Π°ΠΆΠ½Π° для Ρ€Π°Π±ΠΎΡ‚Ρ‹ PIC-ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΊΠΎΠ΄Π° ΠΈ Π±Ρ‹Π²Π°Π΅Ρ‚ Π»ΠΈΠ±ΠΎ статичной (Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² исходном Ρ„Π°ΠΉΠ»Π΅), Π»ΠΈΠ±ΠΎ глобальной (Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ всСм скомпонованным Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ).

ΠŸΡ€ΠΈΠΌΠ΅Ρ€ компиляции Π² ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Ρ‡Π΅Ρ€Π΅Π· Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ модСль ΠΊΠΎΠ΄Π° с использованиСм PIC:

Малая модСль кода

ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ Ρ†ΠΈΡ‚Π°Ρ‚Ρ‹ ΠΈΠ· man gcc Π½Π° Ρ‚Π΅ΠΌΡƒ ΠΌΠ°Π»ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠΎΠ΄Π°:

-mcmodel=small
ГСнСрация ΠΊΠΎΠ΄Π° для ΠΌΠ°Π»ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ: ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΈ Π΅Π΅ символы Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ скомпонованы Π² Π½ΠΈΠΆΠ½ΠΈΡ… Π΄Π²ΡƒΡ… Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚Π°Ρ… адрСсного пространства. Π Π°Π·ΠΌΠ΅Ρ€ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ β€” 64 Π±ΠΈΡ‚. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ скомпонованы ΠΈ статичСски, ΠΈ динамичСски. Π­Ρ‚ΠΎ основная модСль ΠΊΠΎΠ΄Π°.

Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, компилятор ΠΌΠΎΠΆΠ΅Ρ‚ спокойно ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ ΠΈ Π΄Π°Π½Π½Ρ‹Π΅ доступны Ρ‡Π΅Ρ€Π΅Π· 32-Π±ΠΈΡ‚Π½Ρ‹ΠΉ RIP-ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ сдвиг ΠΈΠ· любой ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ Π² ΠΊΠΎΠ΄Π΅. Π”Π°Π²Π°ΠΉΡ‚Π΅ взглянСм Π½Π° дизассСмблированный ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π½Π° Π‘, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΌΡ‹ скомпилировали Ρ‡Π΅Ρ€Π΅Π· Π½Π΅-PIC ΠΌΠ°Π»ΡƒΡŽ модСль ΠΊΠΎΠ΄Π°:

Как ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, доступ ΠΊΠΎ всСм массивам ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ β€” с использованиСм RIP-ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ сдвига. Однако Π² ΠΊΠΎΠ΄Π΅ сдвиг Ρ€Π°Π²Π΅Π½ 0, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ компилятор Π½Π΅ Π·Π½Π°Π΅Ρ‚, Π³Π΄Π΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ сСгмСнт Π΄Π°Π½Π½Ρ‹Ρ…, поэтому для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ‚Π°ΠΊΠΎΠ³ΠΎ доступа ΠΎΠ½ создаСт Ρ€Π΅Π»ΠΎΠΊΠ°Ρ†ΠΈΡŽ:

НаконСц, Π΄Π°Π²Π°ΠΉΡ‚Π΅ взглянСм Π½Π° отсылку ΠΊ global_func :

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ callq Ρ‚ΠΎΠΆΠ΅ RIP-относитСлСн, рСлокация R_X86_64_PC32 Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ здСсь Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΡŽ фактичСского ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ сдвига ΠΊ global_func Π² ΠΎΠΏΠ΅Ρ€Π°Π½Π΄.

Π’ Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ благодаря ΠΌΠ°Π»ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠΎΠ΄Π° компилятор воспринимаСт всС Π΄Π°Π½Π½Ρ‹Π΅ ΠΈ ΠΊΠΎΠ΄ Π±ΡƒΠ΄ΡƒΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΊΠ°ΠΊ доступныС Ρ‡Π΅Ρ€Π΅Π· 32-Π±ΠΈΡ‚Π½Ρ‹ΠΉ сдвиг, ΠΈ Ρ‚Π΅ΠΌ самым для доступа ΠΊ всСвозмоТным ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ создаСт простой ΠΈ эффСктивный ΠΊΠΎΠ΄.

Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ модСль ΠΊΠΎΠ΄Π°

ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ Ρ†ΠΈΡ‚Π°Ρ‚Ρ‹ ΠΈΠ· man gcc Π½Π° Ρ‚Π΅ΠΌΡƒ большой ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠΎΠ΄Π°:

-mcmodel=large
ГСнСрация ΠΊΠΎΠ΄Π° для большой ΠΌΠΎΠ΄Π΅Π»ΠΈ: Π­Ρ‚Π° модСль Π½Π΅ Π΄Π΅Π»Π°Π΅Ρ‚ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ адрСсов ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² сСкций.

И вновь ΠΏΠΎΠ»Π΅Π·Π½ΠΎ Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° Ρ€Π΅Π»ΠΎΠΊΠ°Ρ†ΠΈΠΈ:

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π΅Ρ‚ нСобходимости Π΄Π΅Π»Π°Ρ‚ΡŒ прСдполоТСния ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠ² сСкций ΠΊΠΎΠ΄Π° ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, большая модСль ΠΊΠΎΠ΄Π° довольно ΡƒΠ½ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π° ΠΈ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ опрСдСляСт доступ ΠΊΠΎ всСм Π΄Π°Π½Π½Ρ‹ΠΌ. Π”Π°Π²Π°ΠΉΡ‚Π΅ вновь взглянСм Π½Π° global_arr :

А Ρ‡Ρ‚ΠΎ насчСт Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Ρ‹Π·ΠΎΠ²Π°?

Как ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ, Π² большой ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠΎΠ΄Π° Π½Π΅Ρ‚ ΠΊΠ°ΠΊΠΈΡ…-Π»ΠΈΠ±ΠΎ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅ сСкций ΠΊΠΎΠ΄Π° ΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, Ρ€Π°Π²Π½ΠΎ ΠΊΠ°ΠΊ ΠΈ ΠΎ Ρ„ΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠΌ располоТСнии символов, ΠΎΠ½Π° попросту ссылаСтся Π½Π° символы Ρ‡Π΅Ρ€Π΅Π· Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹Π΅ 64-Π±ΠΈΡ‚Π½Ρ‹Π΅ шаги, своСго Ρ€ΠΎΠ΄Π° Β«Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡƒΡŽ Π΄ΠΎΡ€ΠΎΠΆΠΊΡƒΒ». Однако ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΠΊΠ°ΠΊ, ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ΠΌΠ°Π»ΠΎΠΉ модСлью ΠΊΠΎΠ΄Π°, большая модСль Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ ΠΏΡ€ΠΈ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΈ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ символу. Ваковая Ρ†Π΅Π½Π° бСзопасности.

Π˜Ρ‚Π°ΠΊ, ΠΌΡ‹ с Π²Π°ΠΌΠΈ познакомились с двумя ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Ρ‹ΠΌΠΈ модСлями: Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ малая модСль ΠΊΠΎΠ΄Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ всС вмСщаСтся Π² Π½ΠΈΠΆΠ½ΠΈΠ΅ Π΄Π²Π° Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚Π° памяти, большая модСль ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π½Π΅Ρ‚ Π½ΠΈΡ‡Π΅Π³ΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ ΠΈ любой символ ΠΌΠΎΠΆΠ΅Ρ‚ Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π³Π΄Π΅ ΡƒΠ³ΠΎΠ΄Π½ΠΎ Π²ΠΎ всСй ΠΏΠΎΠ»Π½ΠΎΡ‚Π΅ 64-Π±ΠΈΡ‚Π½ΠΎΠ³ΠΎ адрСсного пространства. ΠšΠΎΠΌΠΏΡ€ΠΎΠΌΠΈΡΡΠΎΠΌ ΠΌΠ΅ΠΆΠ΄Ρƒ этими двумя модСлями становится срСдняя модСль ΠΊΠΎΠ΄Π°.

БрСдняя модСль ΠΊΠΎΠ΄Π°

Как ΠΈ Ρ€Π°Π½Π΅Π΅, Π΄Π°Π²Π°ΠΉΡ‚Π΅ взглянСм Π½Π° ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ Ρ†ΠΈΡ‚Π°Ρ‚Ρ‹ ΠΈΠ· man gcc :

Аналогично ΠΌΠ°Π»ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠΎΠ΄Π°, срСдняя модСль ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ Ρ‡Ρ‚ΠΎ вСсь ΠΊΠΎΠ΄ скомпонован Π² Π΄Π²ΡƒΡ… Π½ΠΈΠΆΠ½ΠΈΡ… Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚Π°Ρ…. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π΄Π°Π½Π½Ρ‹Π΅ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½Ρ‹ Π½Π° ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌΠΎ скомпонованныС Π² Π½ΠΈΠΆΠ½ΠΈΡ… Π΄Π²ΡƒΡ… Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚Π°Ρ… Β«ΠΌΠ°Π»Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅Β» ΠΈ Π½Π΅ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π½Ρ‹Π΅ ΠΏΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ‰Π΅Π½ΠΈΡŽ Π² памяти «большиС Π΄Π°Π½Π½Ρ‹Π΅Β». Π”Π°Π½Π½Ρ‹Π΅ ΠΏΠΎΠΏΠ°Π΄Π°ΡŽΡ‚ Π² ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡŽ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… ΠΏΡ€ΠΈ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ΅Π½ΠΈΠΈ ΠΈΠΌΠΈ ΠΏΡ€Π΅Π΄Π΅Π»Π°, ΠΏΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΡŽ Ρ€Π°Π²Π½ΠΎΠ³ΠΎ 64 ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ‚Π°ΠΌ.

Π’Π΅ΠΏΠ΅Ρ€ΡŒ становится понятно, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ появились Ρ‚Π΅ массивы _big : ΠΎΠ½ΠΈ Π½ΡƒΠΆΠ½Ρ‹ срСднСй ΠΌΠΎΠ΄Π΅Π»ΠΈ для ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ Β«Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Π΄Π°Π½Π½Ρ‹Ρ…Β», ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ ΠΎΠ½ΠΈ, ΠΏΡ€ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅ Π² 200 ΠΊΠΈΠ»ΠΎΠ±Π°ΠΉΡ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ, ΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ. НиТС ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ дизассСмблирования:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊ вСдСтся доступ ΠΊ массивам: ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ массивам _big ΠΈΠ΄Π΅Ρ‚ Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ большой ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠΎΠ΄Π°, Ρ‚ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊ ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹ΠΌ массивам ΠΈΠ΄Π΅Ρ‚ Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΌΠ°Π»ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ. ΠžΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ‚ΠΎΠΆΠ΅ вСдСтся ΠΏΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ ΠΌΠ°Π»ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠΎΠ΄Π°, Π° Ρ€Π΅Π»ΠΎΠΊΠ°Ρ†ΠΈΠΈ Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌ, Ρ‡Ρ‚ΠΎ я Π΄Π°ΠΆΠ΅ Π½Π΅ Π±ΡƒΠ΄Ρƒ ΠΈΡ… Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ.

БрСдняя модСль ΠΊΠΎΠ΄Π° это ΡƒΠΌΠ΅Π»Ρ‹ΠΉ компромисс ΠΌΠ΅ΠΆΠ΄Ρƒ большой ΠΈ ΠΌΠ°Π»ΠΎΠΉ модСлями. Навряд Π»ΠΈ ΠΊΠΎΠ΄ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ окаТСтся слишком Π²Π΅Π»ΠΈΠΊ [4], Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚ΡŒ Π΅Π³ΠΎ свСрх Π»ΠΈΠΌΠΈΡ‚Π° Π² Π΄Π²Π° Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚Π° ΠΌΠΎΠ³ΡƒΡ‚ Ρ€Π°Π·Π²Π΅ Ρ‡Ρ‚ΠΎ статичСски скомпонованныС Π² Π½Π΅Π³ΠΎ большиС куски Π΄Π°Π½Π½Ρ‹Ρ…, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΠΊΠ°ΠΊ Ρ‡Π°ΡΡ‚ΡŒ Π½Π΅ΠΊΠΎΠ΅Π³ΠΎ объСмного Ρ‚Π°Π±Π»ΠΈΡ‡Π½ΠΎΠ³ΠΎ поиска. Π’Π°ΠΊ ΠΊΠ°ΠΊ срСдняя модСль ΠΊΠΎΠ΄Π° отсСиваСт Ρ‚Π°ΠΊΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΌΠ½Ρ‹Π΅ куски Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ особым ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΡ… ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚, Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ²Ρ‹ ΠΊΠΎΠ΄ΠΎΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΈ ΠΌΠ°Π»Ρ‹Ρ… символов Π±ΡƒΠ΄ΡƒΡ‚ Ρ‚Π°ΠΊ ΠΆΠ΅ эффСктивны, ΠΊΠ°ΠΊ ΠΈ Π² ΠΌΠ°Π»ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠΎΠ΄Π°. Волько обращСния ΠΊ большим символам, ΠΏΠΎ Π°Π½Π°Π»ΠΎΠ³ΠΈΠΈ с большой модСлью, ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ ΠΎΡ‚ ΠΊΠΎΠ΄Π° Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠ»Π½Ρ‹ΠΌ 64-Π±ΠΈΡ‚Π½Ρ‹ΠΌ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ большой ΠΌΠΎΠ΄Π΅Π»ΠΈ.

Малая PIC-модСль кода

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° PIC Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Ρ‹ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΊΠΎΠ΄Π°, ΠΈ ΠΊΠ°ΠΊ ΠΈ Ρ€Π°Π½ΡŒΡˆΠ΅ ΠΌΡ‹ Π½Π°Ρ‡Π½Π΅ΠΌ с ΠΌΠ°Π»ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ. [5] НиТС ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠΎΠ΄Π°, скомпилированного Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ°Π»ΡƒΡŽ PIC-модСль:

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² ΠΌΠ°Π»ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠΎΠ΄Π° различия ΠΌΠ΅ΠΆΠ΄Ρƒ большими ΠΈ ΠΌΠ°Π»Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π½Π΅ ΠΈΠ³Ρ€Π°ΡŽΡ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Ρ€ΠΎΠ»ΠΈ, ΠΌΡ‹ сфокусируСмся Π½Π° Π²Π°ΠΆΠ½Ρ‹Ρ… ΠΏΡ€ΠΈ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° Ρ‡Π΅Ρ€Π΅Π· PIC ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Ρ…: различиях ΠΌΠ΅ΠΆΠ΄Ρƒ Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ (статичными) ΠΈ Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ символами.

Как ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ сгСнСрированным для статичных массивов ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ ΠΊΠΎΠ΄ΠΎΠΌ Π² Π½Π΅-PIC случаС. Π­Ρ‚ΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· плюсов Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ x64: благодаря IP-ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΌΡƒ доступу ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ, ΠΌΡ‹ бонусом ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ PIC, ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ Π΄ΠΎ Ρ‚Π΅Ρ… ΠΏΠΎΡ€ ΠΏΠΎΠΊΠ° Π½Π΅ трСбуСтся внСшний доступ ΠΊ символам. ВсС ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ ΠΈ Ρ€Π΅Π»ΠΎΠΊΠ°Ρ†ΠΈΠΈ ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ Ρ‚Π΅ΠΌΠΈ ΠΆΠ΅, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… лишний Ρ€Π°Π· Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ.

Π˜Π½Ρ‚Π΅Ρ€Π΅ΡΠ½ΠΎ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ массивы: стоит Π½Π°ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π² PIC Π³Π»ΠΎΠ±Π°Π»ΡŒΠ½Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‡Π΅Ρ€Π΅Π· GOT, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈΡ… ΠΌΠΎΠ³ΡƒΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ, ΠΈΠ»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠΌΠΈ, ΠΎΠ±Ρ‰ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ [6]. НиТС ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅Ρ‚ΡŒ ΠΊΠΎΠ΄ для доступа ΠΊ global_arr :

Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π΄Π°Π²Π°ΠΉΡ‚Π΅ взглянСм Π½Π° Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ:

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, ΠΊΠ°ΠΊΠΈΠ΅ нСявныС прСдполоТСния ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ компилятор: Ρ‡Ρ‚ΠΎ ΠΊ GOT ΠΈ PLT ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ Ρ‡Π΅Ρ€Π΅Π· RIP-ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Π°Π΄Ρ€Π΅ΡΠ°Ρ†ΠΈΡŽ. Π­Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Π°ΠΆΠ½ΠΎ ΠΏΡ€ΠΈ сравнСнии этой ΠΌΠΎΠ΄Π΅Π»ΠΈ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ PIC-Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΊΠΎΠ΄Π°.

Π‘ΠΎΠ»ΡŒΡˆΠ°Ρ PIC-модСль ΠΊΠΎΠ΄Π°

НиТС ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΡ‡Π΅ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ связанной с этим Ρ†ΠΈΡ‚Π°Ρ‚Ρ‹ ΠΈΠ· ABI:

Π’ ΠΌΠ°Π»ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠΎΠ΄Π° ΠΊΠΎ всСм адрСсам (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ GOT) ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ Ρ‡Π΅Ρ€Π΅Π· ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»Π΅Π½Π½ΡƒΡŽ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΎΠΉ AMD64 IP-ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ Π°Π΄Ρ€Π΅ΡΠ°Ρ†ΠΈΡŽ. ИмСнно поэтому Π½Π΅Ρ‚ Π½ΡƒΠΆΠ΄Ρ‹ Π² явном ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ GOT ΠΈ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ Π½Π΅Ρ‚ Π½ΡƒΠΆΠ΄Ρ‹ Π² ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°ΡŽΡ‰Π΅ΠΌ Π΅Π³ΠΎ ΠΏΡ€ΠΎΠ»ΠΎΠ³Π΅ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π’ большой ΠΈ срСднСй модСлях ΠΊΠΎΠ΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ рСгистр для хранСния адрСса GOT Π² нСзависимых ΠΎΡ‚ располоТСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ…, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ AMD64 ISA Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ большС Ρ‡Π΅ΠΌ 32 Π±ΠΈΡ‚.

Π—Π°Ρ‡Π΅ΠΌ ΠΆΠ΅ ΠΌΡƒΡ‡ΠΈΡ‚ΡŒΡΡ с вычислСниСм адрСса GOT? Π’ΠΎ-ΠΏΠ΅Ρ€Π²Ρ‹Ρ…, ΠΊΠ°ΠΊ ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½ΠΎ Π² Ρ†ΠΈΡ‚Π°Ρ‚Π΅, Π² большой ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠΎΠ΄Π° ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ 32-Π±ΠΈΡ‚Π½ΠΎΠ³ΠΎ RIP-ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ сдвига Π±ΡƒΠ΄Π΅Ρ‚ достаточно для адрСсации GOT, ΠΈΠ·-Π·Π° Ρ‡Π΅Π³ΠΎ Π½Π°ΠΌ ΠΈ трСбуСтся ΠΏΠΎΠ»Π½Ρ‹ΠΉ 64-Π±ΠΈΡ‚Π½Ρ‹ΠΉ адрСс. Π’ΠΎ-Π²Ρ‚ΠΎΡ€Ρ‹Ρ…, ΠΌΡ‹ всС Π΅Ρ‰Π΅ Ρ…ΠΎΡ‚ΠΈΠΌ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с PIC-Π²Π°Ρ€ΠΈΠ°Ρ†ΠΈΠ΅ΠΉ, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΌΡ‹ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ попросту ΠΏΠΎΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΉ адрСс Π² рСгистр. Π‘ΠΊΠΎΡ€Π΅Π΅ сам адрСс Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ вычислСн ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ RIP. Для этого ΠΈ Π½ΡƒΠΆΠ΅Π½ ΠΏΡ€ΠΎΠ»ΠΎΠ³: ΠΎΠ½ ΡΠΎΠ²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ 64-Π±ΠΈΡ‚Π½ΠΎΠ΅ RIP-ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ вычислСниС.

Π’ любом случаС, Ρ€Π°Π· Ρƒ нас Π² rbx Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Π΅ΡΡ‚ΡŒ адрСс GOT, Π΄Π°Π²Π°ΠΉΡ‚Π΅ посмотрим Π½Π° Ρ‚ΠΎ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ доступ ΠΊ static_arr :

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Ρ‡Ρ‚ΠΎ вновь GOT ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΊΠ°ΠΊ привязка, Π½Π° этот Ρ€Π°Π· для обСспСчСния нСзависящСй ΠΎΡ‚ адрСса отсылки ΠΊ сдвигу PLT Π²Ρ…ΠΎΠ΄Π°.

БрСдняя PIC-модСль ΠΊΠΎΠ΄Π°

НаконСц, ΠΌΡ‹ Ρ€Π°Π·Π±Π΅Ρ€Π΅ΠΌ сгСнСрированный для срСднСй PIC-ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠΎΠ΄:

Π’Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚ интСрСс Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ для доступа ΠΊ global_arr_big ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Ρ‚Π°ΠΊΠΎΠΉ ΠΆΠ΅ ΠΊΠΎΠ΄ Π² ΠΌΠ°Π»ΠΎΠΉ PIC-ΠΌΠΎΠ΄Π΅Π»ΠΈ. Π­Ρ‚ΠΎ происходит ΠΏΠΎ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΏΡ€ΠΎΠ»ΠΎΠ³ срСднСй ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠΎΡ€ΠΎΡ‡Π΅ ΠΏΡ€ΠΎΠ»ΠΎΠ³Π° большой ΠΌΠΎΠ΄Π΅Π»ΠΈ: ΠΌΡ‹ ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ Π΄ΠΎΡΡ‚ΡƒΠΏΠ½ΠΎΡΡ‚ΡŒ GOT Π² Ρ€Π°ΠΌΠΊΠ°Ρ… 32-Π±ΠΈΡ‚Π½ΠΎΠΉ RIP-ΠΎΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ адрСсации. Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΊ самому global_arr_big нСльзя ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠΉ доступ, Π½ΠΎ этот случай всС Ρ€Π°Π²Π½ΠΎ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ GOT, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ фактичСски global_arr_big Π² Π½Π΅ΠΌ ΠΈ находится, ΠΏΡ€ΠΈΡ‡Π΅ΠΌ Π² Π²ΠΈΠ΄Π΅ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ 64-Π±ΠΈΡ‚Π½ΠΎΠ³ΠΎ адрСса.

Битуация, Ρ‚Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, отличаСтся для static_arr_big :

Π­Ρ‚ΠΎΡ‚ случай ΠΏΠΎΡ…ΠΎΠΆ Π½Π° Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ PIC-модСль ΠΊΠΎΠ΄Π°, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ‚ΡƒΡ‚ ΠΌΡ‹ всС ΠΆΠ΅ ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΉ адрСс символа, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π½Π΅Ρ‚ Π² самом GOT. Π’Π°ΠΊ ΠΊΠ°ΠΊ это большой символ, ΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ нСльзя ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚ΡŒ Π΅Π³ΠΎ Π½Π°Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Π² Π½ΠΈΠΆΠ½ΠΈΡ… Π΄Π²ΡƒΡ… Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚Π°Ρ…, Π½Π°ΠΌ, ΠΊΠ°ΠΊ ΠΈ Π² большой ΠΌΠΎΠ΄Π΅Π»ΠΈ, трСбуСтся 64-Π±ΠΈΡ‚Π½Ρ‹ΠΉ PIC сдвиг.

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ:

[1] НС стоит ΠΏΡƒΡ‚Π°Ρ‚ΡŒ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠΎΠ΄Π° с 64-Π±ΠΈΡ‚Π½Ρ‹ΠΌΠΈ модСлями Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ модСлями памяти Intel, всС это Ρ€Π°Π·Π½Ρ‹Π΅ Ρ‚Π΅ΠΌΡ‹.

[2] Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠΌΠ½ΠΈΡ‚ΡŒ: собствСнно ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ создаСт компилятор, ΠΈ Ρ€Π΅ΠΆΠΈΠΌΡ‹ адрСсации Ρ„ΠΈΠΊΡΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΈΠΌΠ΅Π½Π½ΠΎ Π½Π° этом шагС. ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ‚ΠΎΡ€ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π·Π½Π°Ρ‚ΡŒ Π² ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΈΠ»ΠΈ ΠΎΠ±Ρ‰ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΠΏΠΎΠΏΠ°Π΄Π΅Ρ‚ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π½Ρ‹ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ, ΠΎΠ΄Π½ΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΌΠ°Π»Ρ‹ΠΌΠΈ, Π° Π΄Ρ€ΡƒΠ³ΠΈΠ΅ большими. ΠšΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊΡƒ извСстСн Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΈΡ‚ΠΎΠ³ΠΎΠ²ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π½ΠΎ ΡƒΠΆΠ΅ слишком ΠΏΠΎΠ·Π΄Π½ΠΎ: ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ‚ лишь ΠΏΠ°Ρ‚Ρ‡ΠΈΡ‚ΡŒ сдвиг ΠΊΠΎΠΌΠ°Π½Π΄ Ρ€Π΅Π»ΠΎΠΊΠ°Ρ†ΠΈΠ΅ΠΉ, Π° Π½Π΅ ΠΌΠ΅Π½ΡΡ‚ΡŒ сами ΠΊΠΎΠΌΠ°Π½Π΄Ρ‹. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, «соглашСниС» ΠΌΠΎΠ΄Π΅Π»ΠΈ ΠΊΠΎΠ΄Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ «подписано» программистом Π½Π° этапС компиляции.

[3] Если Ρ‡Ρ‚ΠΎ-Ρ‚ΠΎ ΠΎΡΡ‚Π°Π»ΠΎΡΡŒ нСпонятным, ΠΎΠ·Π½Π°ΠΊΠΎΠΌΡŒΡ‚Π΅ΡΡŒ со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ΠΉ.

[4] Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, ΠΎΠ±ΡŠΠ΅ΠΌΡ‹ постСпСнно растут. Когда я Π² послСдний Ρ€Π°Π· провСрял Debug+Asserts Π±ΠΈΠ»Π΄ Clang, ΠΎΠ½ ΠΏΠΎΡ‡Ρ‚ΠΈ достигал ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚Π°, Π·Π° Ρ‡Ρ‚ΠΎ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ спасибо Π°Π²Ρ‚ΠΎΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΌΡƒ ΠΊΠΎΠ΄Ρƒ.

[5] Если Π²Ρ‹ Π΅Ρ‰Π΅ Π½Π΅ Π·Π½Π°Π΅Ρ‚Π΅ ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ PIC (ΠΊΠ°ΠΊ Π² Ρ†Π΅Π»ΠΎΠΌ, Ρ‚Π°ΠΊ ΠΈ Π² частности для Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ x64), самоС врСмя ΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ со ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΡΡ‚Π°Ρ‚ΡŒΡΠΌΠΈ ΠΏΠΎ Ρ‚Π΅ΠΌΠ΅: Ρ€Π°Π· ΠΈ Π΄Π²Π°.

[6] Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, ΠΊΠΎΠΌΠΏΠΎΠ½ΠΎΠ²Ρ‰ΠΈΠΊ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ Ρ€Π°Π·Ρ€Π΅ΡˆΠΈΡ‚ΡŒ ссылки, ΠΈ Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½ ΠΏΠ΅Ρ€Π΅Π»ΠΎΠΆΠΈΡ‚ΡŒ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ GOT Π½Π° динамичСский Π·Π°Π³Ρ€ΡƒΠ·Ρ‡ΠΈΠΊ.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

64 Π±ΠΈΡ‚Π°

АрхитСктура x64 Ρ‡Ρ‚ΠΎ это. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Ρ„ΠΎΡ‚ΠΎ АрхитСктура x64 Ρ‡Ρ‚ΠΎ это. Π‘ΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ АрхитСктура x64 Ρ‡Ρ‚ΠΎ это. ΠšΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠ° ΠΏΡ€ΠΎ АрхитСктура x64 Ρ‡Ρ‚ΠΎ это. Π€ΠΎΡ‚ΠΎ АрхитСктура x64 Ρ‡Ρ‚ΠΎ это
Π‘Ρ‚Π°Ρ‚ΡŒΡ раскрываСт смысл Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π° Β«64 Π±ΠΈΡ‚Π°Β». Π’ ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΊΡ€Π°Ρ‚ΠΊΠΎ рассмотрСна история развития 64-Π±ΠΈΡ‚Π½Ρ‹Ρ… систСм, описаны Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ распространСнныС Π½Π° Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ 64-Π±ΠΈΡ‚Π½Ρ‹Π΅ процСссоры Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ Intel 64 ΠΈ 64-битная опСрационная систСма Windows.

Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅

Π’ Ρ€Π°ΠΌΠΊΠ°Ρ… Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ ΠΏΠΎΠ΄ Ρ‚Π΅Ρ€ΠΌΠΈΠ½ΠΎΠΌ Β«64-Π±ΠΈΡ‚Π½Ρ‹ΠΉΒ» ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚ 64-Π±ΠΈΡ‚Π½Ρ‹Π΅ Ρ†Π΅Π»Ρ‹Π΅ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€ 64 Π±ΠΈΡ‚Π°. Под Β«64-Π±ΠΈΡ‚Π½Ρ‹ΠΌΠΈΒ» систСмами ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒΡΡ 64-Π±ΠΈΡ‚Π½Ρ‹Π΅ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ микропроцСссоров (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, EM64T, IA-64) ΠΈΠ»ΠΈ 64-Π±ΠΈΡ‚Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Windows XP Professional x64 Edition). МоТно Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ компиляторах, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ… 64-Π±ΠΈΡ‚Π½Ρ‹ΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Ρ‹ΠΉ ΠΊΠΎΠ΄.

Π’ Π΄Π°Π½Π½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π±ΡƒΠ΄ΡƒΡ‚ рассмотрСны Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹, связанныС с 64-Π±ΠΈΡ‚Π½Ρ‹ΠΌΠΈ тСхнологиями. Π‘Ρ‚Π°Ρ‚ΡŒΡ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для программистов, ΠΆΠ΅Π»Π°ΡŽΡ‰ΠΈΡ… Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ 64-Π±ΠΈΡ‚Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, ΠΈ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π° Π½Π° Windows-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ для Π½ΠΈΡ… вопрос знакомства с 64-Π±ΠΈΡ‚Π½Ρ‹ΠΌΠΈ систСмами Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π°ΠΊΡ‚ΡƒΠ°Π»Π΅Π½.

Π˜ΡΡ‚ΠΎΡ€ΠΈΡ 64-Π±ΠΈΡ‚Π½Ρ‹Ρ… систСм

64-Π±ΠΈΡ‚Π½ΠΎΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π΅Π΄Π°Π²Π½ΠΎ вошла Π² Тизнь Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Ρ… программистов. Однако Ρ€Π°Π±ΠΎΡ‚Π° с 64-Π±ΠΈΡ‚Π½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ ΡƒΠΆΠ΅ Π΄Π»ΠΈΠ½Π½ΡƒΡŽ ΠΈΡΡ‚ΠΎΡ€ΠΈΡŽ.

1961: IBM выпускаСт ΡΡƒΠΏΠ΅Ρ€ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ IBM 7030 Stretch, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ 64-Π±ΠΈΡ‚Π½Ρ‹Π΅ слова Π΄Π°Π½Π½Ρ‹Ρ…, 32-Π±ΠΈΡ‚Π½Ρ‹Π΅ ΠΈΠ»ΠΈ 64-Π±ΠΈΡ‚Π½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹Π΅ инструкции.

1974: Control Data Corporation запускаСт Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹ΠΉ ΡΡƒΠΏΠ΅Ρ€ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ CDC Star-100, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° 64-Π±ΠΈΡ‚Π½Ρ‹Ρ… слов (ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΠ΅ систСмы CDC ΠΈΠΌΠ΅Π»ΠΈ 60-Π±ΠΈΡ‚Π½ΡƒΡŽ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ).

1976: Cray Research выпускаСт ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΡΡƒΠΏΠ΅Ρ€ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ Cray-1, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° 64-Π±ΠΈΡ‚Π½Ρ‹Ρ… слов ΠΈ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ послуТит основой для всСх ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹Ρ… ΡΡƒΠΏΠ΅Ρ€ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² Cray.

1985: Cray выпускаСт UNICOS β€” ΠΏΠ΅Ρ€Π²ΡƒΡŽ 64-Π±ΠΈΡ‚Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Unix.

1991: MIPS Technologies ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ 64-Π±ΠΈΡ‚Π½Ρ‹ΠΉ процСссор, R4000, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Π° Ρ‚Ρ€Π΅Ρ‚ΡŒΡ модификация Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠΉ Π² ΠΈΡ… ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ MIPS. Π­Ρ‚ΠΎΡ‚ процСссор ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² графичСских Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… станциях SGI начиная с ΠΌΠΎΠ΄Π΅Π»ΠΈ IRIS Crimson. Kendall Square Research выпускаСт свой ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΡΡƒΠΏΠ΅Ρ€ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ KSR1, построСнный Π½Π° основС ΠΈΡ… собствСнной Π·Π°ΠΏΠ°Ρ‚Π΅Π½Ρ‚ΠΎΠ²Π°Π½Π½ΠΎΠΉ 64-Π±ΠΈΡ‚Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ RISC ΠΏΠΎΠ΄ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой OSF/1.

1992: Digital Equipment Corporation (DEC) прСдставляСт ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ 64-Π±ΠΈΡ‚Π½ΡƒΡŽ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρƒ Alpha β€” Π΄Π΅Ρ‚ΠΈΡ‰Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° PRISM.

1993: DEC выпускаСт 64-Π±ΠΈΡ‚Π½ΡƒΡŽ Unix-ΠΏΠΎΠ΄ΠΎΠ±Π½ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ систСму DEC OSF/1 AXP (ΠΏΠΎΠ·ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½Π½ΡƒΡŽ Π² Tru64 UNIX) для своих систСм, построСнных Π½Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ Alpha.

1994: Intel ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ ΠΎ своих ΠΏΠ»Π°Π½Π°Ρ… ΠΏΠΎ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ 64-Π±ΠΈΡ‚Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ IA-64 (совмСстно с ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ Hewlett-Packard) β€” ΠΏΡ€Π΅Π΅ΠΌΠ½ΠΈΠΊΠ° ΠΈΡ… 32-Π±ΠΈΡ‚Π½Ρ‹Ρ… процСссоров IA-32. Π”Π°Ρ‚Π° выпуска Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° Π½Π° 1998-1999 Π³ΠΎΠ΄Ρ‹. SGI выпускаСт IRIX 6.0 с 64-Π±ΠΈΡ‚Π½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ чипсСта R8000.

1995: Sun запускаСт 64-Π±ΠΈΡ‚Π½Ρ‹ΠΉ процСссор сСмСйства SPARC UltraSPARC. HAL Computer Systems, подчинСнная Fujitsu, запускаСт Ρ€Π°Π±ΠΎΡ‡ΠΈΠ΅ станции, созданныС Π½Π° основС 64-Π±ΠΈΡ‚Π½ΠΎΠ³ΠΎ процСссора SPARC64 ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ поколСния, нСзависимо Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ HAL. IBM выпускаСт микропроцСссоры A10 ΠΈ A30, Π° Ρ‚Π°ΠΊΠΆΠ΅ 64-Π±ΠΈΡ‚Π½Ρ‹Π΅ процСссоры PowerPC AS. IBM Ρ‚Π°ΠΊΠΆΠ΅ выпускаСт 64-Π±ΠΈΡ‚Π½ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ для систСмы AS/400, способноС ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ систСму, Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ прилоТСния.

1996: Nintendo прСдставляСт ΠΈΠ³Ρ€ΠΎΠ²ΡƒΡŽ консоль Nintendo 64, ΡΠΎΠ·Π΄Π°Π½Π½ΡƒΡŽ Π½Π° основС Π±ΠΎΠ»Π΅Π΅ дСшСвого Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π° MIPS R4000. HP выпускаСт Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ 64-Π±ΠΈΡ‚Π½ΠΎΠΉ 2.0 вСрсии собствСнной Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ PA-RISC PA-8000.

1997: IBM запускаСт Π»ΠΈΠ½Π΅ΠΉΠΊΡƒ RS64 64-Π±ΠΈΡ‚Π½Ρ‹Ρ… процСссоров PowerPC/PowerPC AS.

1998: Sun выпускаСт Solaris 7 с ΠΏΠΎΠ»Π½ΠΎΠΉ 64-Π±ΠΈΡ‚Π½ΠΎΠΉ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ UltraSPARC.

1999: Intel выпускаСт Π½Π°Π±ΠΎΡ€ ΠΊΠΎΠΌΠ°Π½Π΄ для Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ IA-64. AMD ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎ ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚ ΠΎ своСм Π½Π°Π±ΠΎΡ€Π΅ 64-Π±ΠΈΡ‚Π½Ρ‹Ρ… Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ для IA-32, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±Ρ‹Π» Π½Π°Π·Π²Π°Π½ x86-64 (ΠΏΠΎΠ·ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ Π² AMD64).

2000: IBM выпускаСт свой ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ 64-Π±ΠΈΡ‚Π½Ρ‹ΠΉ мэйнфрСйм zSeries z900, совмСстимый с ESA/390, Π° Ρ‚Π°ΠΊΠΆΠ΅ Π½ΠΎΠ²ΡƒΡŽ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΡƒΡŽ систСму z/OS.

2001: Intel Π½Π°ΠΊΠΎΠ½Π΅Ρ† запускаСт Π»ΠΈΠ½Π΅ΠΉΠΊΡƒ 64-Π±ΠΈΡ‚Π½Ρ‹Ρ… процСссоров, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‚ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Itanium ΠΈ рассчитаны Π½Π° Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ сСрвСры. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Π½Π΅ соотвСтствуСт оТиданиям ΠΈΠ·-Π·Π° многочислСнных Π·Π°Π΄Π΅Ρ€ΠΆΠ΅ΠΊ ΠΏΡ€ΠΈ выпускС IA-64 Π½Π° Ρ€Ρ‹Π½ΠΎΠΊ. NetBSD становится ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой, которая запускаСтся Π½Π° процСссорС Intel Itanium послС Π΅Π³ΠΎ Π²Ρ‹Ρ…ΠΎΠ΄Π°. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Microsoft Ρ‚Π°ΠΊΠΆΠ΅ выпускаСт Windows XP 64-Bit Edition для Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ IA-64 сСмСйства Itanium, хотя Π² Π½Π΅ΠΉ сохраняСтся Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ 32-Π±ΠΈΡ‚Π½Ρ‹Π΅ прилоТСния ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ прослойки WoW64.

2003: AMD прСдставляСт Π»ΠΈΠ½Π΅ΠΉΠΊΠΈ процСссоров Opteron ΠΈ Athlon 64, созданныС Π½Π° основС Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ AMD64, которая являСтся ΠΏΠ΅Ρ€Π²ΠΎΠΉ 64-Π±ΠΈΡ‚Π½ΠΎΠΉ процСссорной Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€ΠΎΠΉ, основанной Π½Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ x86. Apple Π½Π°Ρ‡ΠΈΠ½Π°Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ 64-Π±ΠΈΡ‚Π½Ρ‹ΠΉ процСссор Β«G5Β» PowerPC 970 производства IBM. Intel ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ процСссорныС Ρ‡ΠΈΠΏΡ‹ сСмСйства Itanium останутся СдинствСнными 64-Π±ΠΈΡ‚Π½Ρ‹ΠΌΠΈ процСссорами, Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Π°Π½Π½Ρ‹ΠΌΠΈ Π² ΠΈΡ… ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ.

2004: Π’ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° коммСрчСский успСх AMD, Intel признаСтся, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π»ΠΈ ΠΊΠ»ΠΎΠ½ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠΉ AMD64, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π΄Π°Π»ΠΈ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ IA-32e (ΠΏΠΎΠ·ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ Π² EM64T, ΠΈ Π·Π°Ρ‚Π΅ΠΌ Π΅Ρ‰Π΅ Ρ€Π°Π· Π² Intel 64). Intel Ρ‚Π°ΠΊΠΆΠ΅ выпускаСт ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½Ρ‹Π΅ вСрсии сСмСйств процСссоров Xeon ΠΈ Pentium 4 с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ Π½ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠΌΠ°Π½Π΄.

2004: VIA Technologies прСдставляСт свой 64-Π±ΠΈΡ‚Π½Ρ‹ΠΉ процСссор Isaiah.

2005: 31 января Sun выпускаСт Solaris 10 с ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΎΠΉ процСссоров AMD64 / Intel 64. 30 апрСля Microsoft выпускаСт Windows XP Professional x64 Edition для процСссоров AMD64 / Intel 64.

2006: Sony, IBM ΠΈ Toshiba Π½Π°Ρ‡ΠΈΠ½Π°ΡŽΡ‚ выпуск 64-Π±ΠΈΡ‚Π½ΠΎΠ³ΠΎ процСссора Cell для PlayStation 3, сСрвСров, Ρ€Π°Π±ΠΎΡ‡ΠΈΡ… станций ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… устройств. Microsoft выпускаСт Windows Vista с Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠΉ 64-Π±ΠΈΡ‚Π½ΠΎΠΉ вСрсиСй для процСссоров AMD64 / Intel 64, которая ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ 32-Π±ΠΈΡ‚Π½ΡƒΡŽ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ. ВсС Windows-прилоТСния ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ ΡΠ²Π»ΡΡŽΡ‚ΡΡ 64-Π±ΠΈΡ‚Π½Ρ‹ΠΌΠΈ, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΈΠ· Π½ΠΈΡ… ΠΈΠΌΠ΅ΡŽΡ‚ 32-Π±ΠΈΡ‚Π½Ρ‹Π΅ вСрсии, Π²ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Π΅ Π² систСму Π² Π²ΠΈΠ΄Π΅ ΠΏΠ»Π°Π³ΠΈΠ½ΠΎΠ² Π² цСлях совмСстимости.

2009: Как ΠΈ Windows Vista, Windows 7 ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Microsoft Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ ΠΏΠΎΠ»Π½ΡƒΡŽ 64-Π±ΠΈΡ‚Π½ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ для процСссоров AMD64 / Intel 64, ΠΈ Π½Π° Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ Π½ΠΎΠ²Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ устанавливаСтся 64-битная вСрсия. Π’Ρ‹Ρ…ΠΎΠ΄ΠΈΡ‚ опСрационная систСма ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Apple Mac OS X 10.6, Β«Snow LeopardΒ» которая ΠΈΠΌΠ΅Π΅Ρ‚ 64-Π±ΠΈΡ‚Π½ΠΎΠ΅ ядро ΠΈ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π° для процСссоров AMD64 / Intel 64, ΠΎΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ эта систСма устанавливаСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΈΠ· послСдних ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ΠΎΠ² ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Apple. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, поставляСмых с Mac OS X 10.6, Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ Ρ‚Π°ΠΊΠΆΠ΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ 64-Π±ΠΈΡ‚Π½Ρ‹ΠΌΠΈ.

Π‘ΠΎΠ»Π΅Π΅ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π½ΠΎ с историСй развития 64-Π±ΠΈΡ‚Π½Ρ‹Ρ… систСм ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π”ΠΆΠΎΠ½Π° МашСй «Π”ΠΎΠ»Π³Π°Ρ Π΄ΠΎΡ€ΠΎΠ³Π° ΠΊ 64 Π±ΠΈΡ‚Π°ΠΌ» [1] ΠΈ Π² энциклопСдичСской ΡΡ‚Π°Ρ‚ΡŒΠ΅ Π² Wikipedia «64-bit» [2].

ΠŸΡ€ΠΈΠΊΠ»Π°Π΄Π½ΠΎΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ 64-Π±ΠΈΡ‚Π½Ρ‹Π΅ систСмы

АрхитСктура Intel 64 (AMD64)

РассматриваСмая Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Intel 64 простоС, Π½ΠΎ Π² Ρ‚ΠΎ ΠΆΠ΅ врСмя ΠΌΠΎΡ‰Π½ΠΎΠ΅ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ совмСстимоС Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅ΠΉ ΠΏΡ€ΠΎΠΌΡ‹ΡˆΠ»Π΅Π½Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ x86. Она добавляСт 64-Π±ΠΈΡ‚Π½ΠΎΠ΅ адрСсноС пространство ΠΈ Ρ€Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ рСгистровыС рСсурсы для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ большСй ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… 64-Π±ΠΈΡ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. АрхитСктура обСспСчиваСт ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅Π³ΠΎ 16-Π±ΠΈΡ‚Π½ΠΎΠ³ΠΎ ΠΈ 32-Π±ΠΈΡ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСм Π±Π΅Π· ΠΈΡ… ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ ΠΈΠ»ΠΈ пСрСкомпиляции.

ΠžΡ‚Π»ΠΈΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒΡŽ Intel 64 являСтся ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚ΠΈ 64-Π±ΠΈΡ‚Π½Ρ‹Ρ… рСгистров ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния (Π² x86-32 имСлось восСмь 32-Π±ΠΈΡ‚Π½Ρ‹Ρ… рСгистров). ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ 64-Π±ΠΈΡ‚Π½Ρ‹Π΅ арифмСтичСскиС ΠΈ логичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ Π½Π°Π΄ Ρ†Π΅Π»Ρ‹ΠΌΠΈ числами. ΠŸΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ 64-Π±ΠΈΡ‚Π½Ρ‹Π΅ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ адрСса. Для адрСсации Π½ΠΎΠ²Ρ‹Ρ… рСгистров для ΠΊΠΎΠΌΠ°Π½Π΄ Π²Π²Π΅Π΄Π΅Π½Ρ‹ «прСфиксы Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ рСгистра», для ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π±Ρ‹Π» Π²Ρ‹Π±Ρ€Π°Π½ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΊΠΎΠ΄ΠΎΠ² 40h-4Fh, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΡ…ΡΡ для ΠΊΠΎΠΌΠ°Π½Π΄ INC ΠΈ DEC Π² 32- ΠΈ 16-Π±ΠΈΡ‚Π½Ρ‹Ρ… Ρ€Π΅ΠΆΠΈΠΌΠ°Ρ…. ΠšΠΎΠΌΠ°Π½Π΄Ρ‹ INC ΠΈ DEC Π² 64-Π±ΠΈΡ‚Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π² Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰Π΅ΠΉ, Π΄Π²ΡƒΡ…Π±Π°ΠΉΡ‚ΠΎΠ²ΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ΅.

16 цСлочислСнных 64-Π±ΠΈΡ‚Π½Ρ‹Ρ… рСгистра ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния (RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP, R8 β€” R15),
8 80-Π±ΠΈΡ‚Π½Ρ‹Ρ… рСгистров с ΠΏΠ»Π°Π²Π°ΡŽΡ‰Π΅ΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ (ST0 β€” ST7),
8 64-Π±ΠΈΡ‚Π½Ρ‹Ρ… рСгистров Multimedia Extensions (MM0 β€” MM7, ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ±Ρ‰Π΅Π΅ пространство с рСгистрами ST0 β€” ST7),
16 128-Π±ΠΈΡ‚Π½Ρ‹Ρ… рСгистров SSE (XMM0 β€” XMM15),
64-Π±ΠΈΡ‚Π½Ρ‹ΠΉ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΡŒ RIP ΠΈ 64-Π±ΠΈΡ‚Π½Ρ‹ΠΉ рСгистр Ρ„Π»Π°Π³ΠΎΠ² RFLAGS.

ΠΠ΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ 64-Π±ΠΈΡ‚Π½ΠΎΠΉ Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ опрСдСляСтся прилоТСниями, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ большоС адрСсноС пространство. Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ это Π²Ρ‹ΡΠΎΠΊΠΎΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ сСрвСры, систСмы управлСния Π±Π°Π·Π°ΠΌΠΈ Π΄Π°Π½Π½Ρ‹Ρ…, БАПР ΠΈ, ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎ, ΠΈΠ³Ρ€Ρ‹. Π’Π°ΠΊΠΈΠ΅ прилоТСния ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ сущСствСнныС прСимущСства ΠΎΡ‚ 64-Π±ΠΈΡ‚Π½ΠΎΠ³ΠΎ адрСсного пространства ΠΈ увСличСния количСства рСгистров. МалоС количСство рСгистров, доступноС Π² ΡƒΡΡ‚Π°Ρ€Π΅Π²ΡˆΠ΅ΠΉ x86 Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅, ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π² Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡Π°Ρ…. Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½Π½ΠΎΠ΅ количСство рСгистров обСспСчиваСт Π΄ΠΎΡΡ‚Π°Ρ‚ΠΎΡ‡Π½ΡƒΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ для ΠΌΠ½ΠΎΠ³ΠΈΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ.

64-Π±ΠΈΡ‚Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы

ΠŸΡ€Π°ΠΊΡ‚ΠΈΡ‡Π΅ΡΠΊΠΈ всС соврСмСнныС ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы сСйчас ΠΈΠΌΠ΅ΡŽΡ‚ вСрсии для Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Ρ‹ Intel 64. НапримСр, Microsoft прСдоставляСт Windows XP x64. ΠšΡ€ΡƒΠΏΠ½Π΅ΠΉΡˆΠΈΠ΅ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΈ UNIX систСм Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ 64-Π±ΠΈΡ‚Π½Ρ‹Π΅ вСрсии, ΠΊΠ°ΠΊ Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Linux Debian 3.5 x86-64. Однако это Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ вСсь ΠΊΠΎΠ΄ Ρ‚Π°ΠΊΠΎΠΉ систСмы являСтся ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ 64-Π±ΠΈΡ‚Π½Ρ‹ΠΌ. Π§Π°ΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° ОБ ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ прилоТСния Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡΡ‚Π°Π²Π°Ρ‚ΡŒΡΡ 32-Π±ΠΈΡ‚Π½Ρ‹ΠΌΠΈ, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Intel 64 обСспСчиваСт ΠΎΠ±Ρ€Π°Ρ‚Π½ΡƒΡŽ ΡΠΎΠ²ΠΌΠ΅ΡΡ‚ΠΈΠΌΠΎΡΡ‚ΡŒ с 32-Π±ΠΈΡ‚Π½Ρ‹ΠΌΠΈ прилоТСниями. НапримСр, 64-битная вСрсия Windows ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ WoW64 (Windows-on-Windows 64), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ транслируСт Π²Ρ‹Π·ΠΎΠ²Ρ‹ 32-Π±ΠΈΡ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΊ рСсурсам 64-Π±ΠΈΡ‚Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы.

Π”Π°Π»Π΅Π΅ Π² ΡΡ‚Π°Ρ‚ΡŒΠ΅ ΠΌΡ‹ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 64-Π±ΠΈΡ‚Π½Ρ‹Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Π΅ систСмы сСмСйства Windows.

WoW64

Windows-on-Windows 64-bit (WoW64) β€” подсистСма ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Windows, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰Π°Ρ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ 32-Π±ΠΈΡ‚Π½Ρ‹Π΅ прилоТСния Π½Π° всСх 64-Π±ΠΈΡ‚Π½Ρ‹Ρ… вСрсиях Windows.

WoW64 Π½Π° Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π΅ Intel 64 (AMD64 / x64) Π½Π΅ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ эмуляции инструкций. Π—Π΄Π΅ΡΡŒ подсистСма WoW64 эмулируСт Ρ‚ΠΎΠ»ΡŒΠΊΠΎ 32-Π±ΠΈΡ‚Π½ΠΎΠ΅ ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅, Π·Π° счСт Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ прослойки ΠΌΠ΅ΠΆΠ΄Ρƒ 32-Π±ΠΈΡ‚Π½Ρ‹ΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ 64-Π±ΠΈΡ‚Π½Ρ‹ΠΌ Windows API. Π“Π΄Π΅-Ρ‚ΠΎ эта прослойка тонкая, Π³Π΄Π΅-Ρ‚ΠΎ Π½Π΅ ΠΎΡ‡Π΅Π½ΡŒ. Для срСднСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎΡ‚Π΅Ρ€ΠΈ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΈΠ·-Π·Π° наличия Ρ‚Π°ΠΊΠΎΠΉ прослойки составят ΠΎΠΊΠΎΠ»ΠΎ 2%. Для Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ это Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ большС. Π”Π²Π° ΠΏΡ€ΠΎΡ†Π΅Π½Ρ‚Π° это Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ, Π½ΠΎ слСдуСт ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ 32-Π±ΠΈΡ‚Π½Ρ‹Π΅ прилоТСния Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ 64-Π±ΠΈΡ‚Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Windows, Ρ‡Π΅ΠΌ Π² 32-Π±ΠΈΡ‚Π½ΠΎΠΉ срСдС.

ΠšΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡ 64-Π±ΠΈΡ‚Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΡΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² WoW64, Π½ΠΎ ΠΈ Π΄Π°Π΅Ρ‚ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ прирост ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π­Ρ‚ΠΎ связано с Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π½Ρ‹ΠΌΠΈ измСнСниями Π² микропроцСссорС, Ρ‚Π°ΠΊΠΈΠΌΠΈ ΠΊΠ°ΠΊ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ количСства рСгистров ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния. Для срСднСй ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… 5-15% прироста ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΎΡ‚ простой пСрСкомпиляции.

Из-Π·Π° наличия прослойки WoW64 32-Π±ΠΈΡ‚Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ ΠΌΠ΅Π½Π΅Π΅ эффСктивно Π² 64-Π±ΠΈΡ‚Π½ΠΎΠΉ срСдС, Ρ‡Π΅ΠΌ Π² 32-Π±ΠΈΡ‚Π½ΠΎΠΉ. Но всС-Ρ‚Π°ΠΊΠΈ, простыС 32-Π±ΠΈΡ‚Π½Ρ‹Π΅ прилоТСния ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ прСимущСство ΠΎΡ‚ ΠΈΡ… запуска Π² 64-Π±ΠΈΡ‚Π½ΠΎΠΉ срСдС. Π’Ρ‹, Π½Π°Π²Π΅Ρ€Π½ΠΎΠ΅, Π·Π½Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, собранная с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ /LARGEADDRESSAWARE:YES ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π΄Π΅Π»ΡΡ‚ΡŒ Π΄ΠΎ 3-Ρ… Π³ΠΈΠ³Π°Π±Π°ΠΉΡ‚ памяти, Ссли 32-битная опСрационная систСма Windows Π·Π°ΠΏΡƒΡ‰Π΅Π½Π° с ΠΊΠ»ΡŽΡ‡ΠΎΠΌ /3gb. Π’Π°ΠΊ Π²ΠΎΡ‚, эта ΠΆΠ΅ 32-битная ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, запущСнная Π½Π° 64-Π±ΠΈΡ‚Π½ΠΎΠΉ систСмС, ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠΎΡ‡Ρ‚ΠΈ 4 GB памяти (Π½Π° ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠ΅ ΠΎΠΊΠΎΠ»ΠΎ 3.5 GB).

ΠŸΠΎΠ΄ΡΠΈΡΡ‚Π΅ΠΌΠ° WoW64 ΠΈΠ·ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ 32-разрядныС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΎΡ‚ 64-разрядных ΠΏΡƒΡ‚Π΅ΠΌ пСрСнаправлСния ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠΉ ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ ΠΈ рССстру. Π­Ρ‚ΠΎ ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ случайный доступ 32-Π±ΠΈΡ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΊ Π΄Π°Π½Π½Ρ‹ΠΌ 64-Π±ΠΈΡ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. НапримСр, 32-Π±ΠΈΡ‚Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ запускаСт Ρ„Π°ΠΉΠ» DLL ΠΈΠ· ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π° %systemroot%\System32, ΠΌΠΎΠΆΠ΅Ρ‚ случайно ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ 64-разрядному Ρ„Π°ΠΉΠ»Ρƒ DLL, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ нСсовмСстим с 32-Π±ΠΈΡ‚Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ. Π’ΠΎ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΠ΅ этого подсистСма WoW64 пСрСнаправляСт доступ ΠΈΠ· ΠΏΠ°ΠΏΠΊΠΈ %systemroot%\System32 Π² ΠΏΠ°ΠΏΠΊΡƒ %systemroot%\SysWOW64. Π­Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅Π½Π°ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ позволяСт ΠΏΡ€Π΅Π΄ΠΎΡ‚Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ ошибки совмСстимости, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΏΡ€ΠΈ этом трСбуСтся Ρ„Π°ΠΉΠ» DLL, созданный ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с 32-разрядными прилоТСниями.

ΠŸΠΎΠ΄Ρ€ΠΎΠ±Π½Π΅Π΅ с ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠ°ΠΌΠΈ пСрСнаправлСния Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмы ΠΈ рССстра ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ MSDN «Running 32-bit Applications».

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½Π°Ρ модСль Win64

Π’Π°ΠΊΠΆΠ΅ ΠΊΠ°ΠΊ ΠΈ Π² Win32 Ρ€Π°Π·ΠΌΠ΅Ρ€ страниц Π² Win64 составляСт 4Кб. ΠŸΠ΅Ρ€Π²Ρ‹Π΅ 64Кб адрСсного пространства Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‚ΡΡ, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ наимСньший ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ адрСс это 0x10000. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Win32, систСмныС DLL Π·Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‚ΡΡ Π²Ρ‹ΡˆΠ΅ 4Π“Π±.

Π Π°Π·Π½ΠΈΡ†Π° Π² ΡΠΎΠ³Π»Π°ΡˆΠ΅Π½ΠΈΡΡ… ΠΎ Π²Ρ‹Π·ΠΎΠ²Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ 64-Π±ΠΈΡ‚Π½Ρ‹ΠΉ, ΠΈ 32-Π±ΠΈΡ‚Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ словами, Ссли ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ скомпилировано для 64-Π±ΠΈΡ‚Π½ΠΎΠ³ΠΎ Ρ€Π΅ΠΆΠΈΠΌΠ°, Ρ‚ΠΎ всС ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ (DLL) Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ 64-Π±ΠΈΡ‚Π½Ρ‹ΠΌΠΈ.

ΠŸΠ΅Ρ€Π΅Π΄Π°Ρ‡Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² Ρ‡Π΅Ρ€Π΅Π· рСгистры являСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· Π½ΠΎΠ²ΡˆΠ΅ΡΡ‚Π², Π΄Π΅Π»Π°ΡŽΡ‰ΠΈΡ… 64-Π±ΠΈΡ‚Π½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ, Ρ‡Π΅ΠΌ 32-Π±ΠΈΡ‚Π½Ρ‹Π΅. Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π²Ρ‹ΠΈΠ³Ρ€Ρ‹Ρˆ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ 64-Π±ΠΈΡ‚Π½Ρ‹Π΅ Ρ‚ΠΈΠΏΡ‹ Π΄Π°Π½Π½Ρ‹Ρ….

АдрСсноС пространство

Π₯отя 64-Π±ΠΈΡ‚Π½Ρ‹ΠΉ процСссор тСорСтичСски ΠΌΠΎΠΆΠ΅Ρ‚ Π°Π΄Ρ€Π΅ΡΠΎΠ²Π°Ρ‚ΡŒ 16 экзабайт памяти (2^64), Win64 Π² настоящий ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ 16 Ρ‚Π΅Ρ€Π°Π±Π°ΠΉΡ‚ (2^44). Π­Ρ‚ΠΎΠΌΡƒ Π΅ΡΡ‚ΡŒ нСсколько ΠΏΡ€ΠΈΡ‡ΠΈΠ½. Π’Π΅ΠΊΡƒΡ‰ΠΈΠ΅ процСссоры ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ доступ лишь ΠΊ 1 Ρ‚Π΅Ρ€Π°Π±Π°ΠΉΡ‚Ρƒ (2^40) физичСской памяти. АрхитСктура (Π½ΠΎ Π½Π΅ аппаратная Ρ‡Π°ΡΡ‚ΡŒ) ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ это пространство Π΄ΠΎ 4 ΠΏΠ΅Ρ‚Π°Π±Π°ΠΉΡ‚ (2^52). Однако Π² этом случаС Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ³Ρ€ΠΎΠΌΠ½ΠΎΠ΅ количСство памяти для страничных Ρ‚Π°Π±Π»ΠΈΡ†, ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°ΡŽΡ‰ΠΈΡ… ΠΏΠ°ΠΌΡΡ‚ΡŒ.

Помимо пСрСчислСнных ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΉ, объСм памяти, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ доступСн Π² Ρ‚ΠΎΠΉ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠΉ вСрсии 64-Π±ΠΈΡ‚Π½ΠΎΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмС Windows зависит Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚ коммСрчСских сообраТСний ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Microsoft. НиТС ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° информация ΠΏΠΎ ΠΎΠ±ΡŠΠ΅ΠΌΡƒ памяти, ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅ΠΌΠΎΠΉ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌΠΈ вСрсиями 64-Π±ΠΈΠ½Ρ‹ΠΌΠΈ вСрсиями Windows:

Windows XP Professional β€” 128 Gbyte;
Windows Server 2003, Standard β€” 32 Gbyte;
Windows Server 2003, Enterprise β€” 1 Tbyte;
Windows Server 2003, Datacenter β€” 1 Tbyte;
Windows Server 2008, Datacenter β€” 2 Tbyte;
Windows Server 2008, Enterprise β€” 2 Tbyte;
Windows Server 2008, Standard β€” 32 Gbyte;
Windows Server 2008, Web Server β€” 32 Gbyte;
Vista Home Basic β€” 8 Gbyte;
Vista Home Premium β€” 16 Gbyte;
Vista Business β€” 128 Gbyte;
Vista Enterprise β€” 128 Gbyte;
Vista Ultimate β€” 128 Gbyte;
Windows 7 Home Basic β€” 8 Gbyte;
Windows 7 Home Premium β€” 16 Gbyte;
Windows 7 Professional β€” 192 Gbyte;
Windows 7 Enterprise β€” 192 Gbyte;
Windows 7 Ultimate β€” 192 Gbyte;

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° 64-Π±ΠΈΡ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ

НаиболСС ΠΏΠΎΠ»Π½ΠΎ вопросы Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ 64-Π±ΠΈΡ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ рассмотрСны Π² курсС «Π£Ρ€ΠΎΠΊΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ 64-Π±ΠΈΡ‚Π½Ρ‹Ρ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° языкС Π‘ΠΈ/Π‘ΠΈ++». Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅:

Π’Π°ΠΊΠΆΠ΅ Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ Ρ€Π°Π·Π΄Π΅Π» с ΠΎΠ±Π·ΠΎΡ€Π°ΠΌΠΈ статСй ΠΏΠΎ Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ связанной с 64-Π±ΠΈΡ‚Π½ΠΌΠΈ тСхнологиями.

Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ

Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π’Π°Ρˆ адрСс email Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½. ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΏΠΎΠΌΠ΅Ρ‡Π΅Π½Ρ‹ *