• Aucun résultat trouvé

CS × 0x10 + disp

N/A
N/A
Protected

Academic year: 2022

Partager "CS × 0x10 + disp"

Copied!
5
0
0

Texte intégral

(1)

Les instrutions du mode 64 bits

Ayantsaisileprinipedeompatibilitédesmiroproesseursd'Intel,onpeutpenserquel'on

varetrouverdanslemode64 bitsle même jeu d'instrutionsen ode mahine qued'habitude,

avepossibilitéd'adresse etd'opérandesur64bits, ainsiquedesinstrutionsnouvelles.En fait

en'estpastout àfaitleas:ertainsodesopérationontdisparu dansemode(onduisantà

unefaute

hh

odeopérationnonvalide

ii

lorsqu'ilssontutilisés);lasigniationdeertainsodes opérationahangée;lasigniationd'undesmodesd'adressageahangé.Est-edûaufaitque

lemode64bitsaétéonçuparAMDetnonparIntel?

Ceiaévidemmentdesonséquenespourlesprogrammes.Lesprogrammesdoiventsystéma-

tiquementêtrereompilés(lorsqu'ilssontérits,disons,enlangageC)ouréassemblés(lorsqu'ils

sontéritsenlangaged'assemblage)avantdepouvoirêtreexéutésenmode64bitsalorsquee

n'est pasle asen mode longompatible (d'où le nom). Mais une simplereompilation ouun

simpleréassemblagen'estpassusant:ertainsprogrammesexigentuneadaptation.Beauoup

d'adaptations seront transparentes au programmeur, le ompilateur ou l'assembleur faisant le

travailàsaplae, maisein'estpastoujoursleas.

(2)

15.1 Les instrutions en mode 64 bits

15.1.1 Certains hangements dans les odes opération

Certainesinstrutionsdisparaissentpurementetsimplementenmode64bits:

Instrution Opode Signiation

AAA 0x37 ASCIIAdjustafterAddition

AAD 0xD5 ASCIIAdjustAXbeforeDivision

AAM 0xD4 ASCIIAdjustAXafterMultipliation

AAS 0x3F ASCIIAdjustafterSubstration

BOUND 0x62 ChekArrayAgainstBounds

CALL(far) 0x9A Farabsolute

DAA 0x27 DeimalAdjustALafterAddition

DAS 0x2F DeimalAdjustALafterSubstration

INTO 0xCE InterrupttoOverowVetor

JMP(far) 0xEA JumpFar(absolute)

POP DS 0x1F

POP ES 0x07

POP SS 0x17

POPA,POPAD 0x61 POPALLtoGPR WordsorDoublewords

PUSH CS 0x0E

PUSH DS 0x1E

PUSH ES 0x06

PUSH SS 0x16

PUSHA,PUSHAD 0x60 PushAlltoGPRWordsorDoublewords

SALC 0xD6 SetALAordingtoCF

SYSENTER 0x0F 34 SystemCall

SYSEXIT 0x0F 35 SystemReturn

Certainesdisparaissentarleuropodeestréutilisé:

Instrution Opode Signiation Nouvelleutilisation

ARPL 0x63 AdjustRequestorPrivilegeLevel MOVSXD

DEC 0x484F Derementation REXprex

INC 0x4047 Inrementation REXprex

LDS 0xC5 LoadDSFarPointer VEXprex

LES 0xC4 LoadESFarPointer VEXprex

Commentaires.- 1

o

) Pour les instrutions INC et DEC, seules disparaissent les odages de es

instrutions sur un otet onernant les registres généraux, par exemple INC AX. On peut les

oderautrementenutilisantl'opode0xFFsuividel'otetModR/M.

-2

o

)Leodeopération0x90del'instrutionNOPontinueàexisterparompati-

bilitéasendantemaisils'agitenfaitd'unaliasdel'instrutionXCHG EAX, EAX.

(3)

15.1.2 Nouvelle interprétationdes déplaements

Contexte.-Pouraherunaratèreaudébutdeladeuxièmelignedel'éran,nousavonsutilisé,

enmodeprotégé,l'instrutionsuivante enadressagediret :

movb %al,(0xB80A0)

'est-à-direquenousavonsplaéleontenuduregistreALàl'adresseabsolue0xB80A0,l'adresse

debasedeDSétant0.

L'adressedebasedusegment(deode)étanttoujours0enmode64bits,onesttentéd'utiliser

lamêmeinstrutionpoureetuerlamême opération.Maiselanemarhepas.

Déplaement.- Dans leas de l'adressagediret,l'opérande (la onstante plaéeentre rohets

danslareprésentationenlangagesymbolique)estundéplaementdisp.Lasigniationdeelui-

iestdiérente suivantlemoded'opérationutilisé:

Enmoderéel,l'adresseorrespondanteest:

CS × 0x10 + disp

Enmodeprotégé etenmodeompatible,ona:

base + disp

base

estl'adressedebasedusegmentdesdonnéesdeséleteurDS.

Enmode64bits, ledéplaementest relatifauregistred'instrutionRIP:

RIP + disp

RIPontenantl'adressedel'instrutionquisuitl'instrutiondanslaquelleonutiliseledé-

plaement.Ledéplaementesttoujoursunentierrelatifodésur32bitsmaiselapermet

deparourirtoutl'espaeadressablepuisque RIPontientunevaleurodéesur64bits.

Onparledemode d'adressagerelatif auRIP(RIPrelative addressing).

Exemple.-Reprenonsnotrepremierexempledeodeéritenmode64bits:

org 0x60000

use64

mov rax,'L O N G '

mov [0xB80A0℄,rax

jmp $

dontl'assemblageonduità:

48 B8 4C 20 4F 20 4E 20 47 20

48 89 05 8F 80 05 00

EB FE

L'instrutionJMPsuivantl'instrutionMOVquinousintéresseadonundéalagede17,soit0x11,

relativementàl'origine0x60000.LeontenudeRIPestdon0x60011.Ledéalagedelaseonde

instrutionMOVest0x5808F,ommeonpeutlevoirsurleodemahine.

LeontenudeRAXseradonplaéen:

0x60000 + 0x11 + 0x5808F = 0xB80A0

(4)

Casdulangaged'assemblage.-Commenousvenonsdelevoir,l'assembleurnousaide:onplae

ommedéplaementequel'onaimeraitobteniretl'assembleurtraduitenodemahineequ'il

faut.

Cetteaideest bienvenuemaisaseslimites :ilfautonnaîtrel'emplaementdel'instrution.

Nous avons utilisé la diretive ORG dans e as puisque nous savions où allait être plaé le

programme.Maise n'estpastoujoursleas.

Leprogrammeainsiobtenun'estpasrelogeable.

(5)

15.2 Exemples de programmes

15.2.1 Programme d'appliation en 64 bits

Jusqu'iinousavonssurtoutéritdesprogrammesditssystème.Maintenantquenousavons

omment passer aumode 64 bits et revenir au mode réel,nous pouvons remplaer notre pro-

grammed'exempleenmode64bits,àsavoirl'ahagede`LONG', pare quenousvoulons.

Érivons,parexemple,unprogrammeeetuantuneadditionsur64bitsetplaçantlerésultat

ànotreadressehabituelle6000:0,pourpouvoirvérierqueelaabienétéeetuélorsqu'onest

revenuenmoderéel.

Ilsutderemplaer,dansleprogrammeboot5.asm,l'exempleenmode64bits:

;

; Sample in 64-bit mode

;

use64

suiteL:

mov rax,'L O N G '

mov ebx,0B80A0h

mov [ebx℄,rax

par:

;

; Sample in 64-bit mode

;

use64

suiteL:

mov rax,12345678h

shl rax,32

add rax,12345678h

mov ebx,60000h

mov [ebx℄,rax

Pourne pas plaer de valeurimmédiate de plus de 32 bits dans leregistre 64 bits RAX,on

yplae une onstante 32bits, quel'on déplae dans ledouble motde poids fort,àlaquelle on

ajouteune autreonstante 32bits (iilamême),puisonplae leontenuduregistre64bits à

l'emplaementvoulu.

Après avoir assemblé le programme, disons boot6.asm, ave FASM et l'avoir plaé dans le

répertoireBOOTdenotrelé USBdémarrantsurMS-DOS, onexéuteleprogramme:

C:\BOOT>debug

-D 6000:0 L 10

6000:0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ...

-q

C:\BOOT>boot6.om

C:\BOOT>debug

-D 6000:0 L 10

6000:0 78 56 34 12 78 56 34 12-00 00 00 00 00 00 00 00 xV4.xV4...

-q

equionrmequel'additionabienétéeetuéesur64bitsetqueletransfertàl'adresse6000:0

Références

Documents relatifs

Par souci d'égalité de traitement avec les autres usagers de l’office cantonal de la population (OCPM), les demandes de régularisation déposées dans le cadre de l'opération n'ont

Justin a pris un encadrement de π au centième, puis il en déduit le résultata. Karine utilise la touche π de

- décidé de faire usage de la délégation de compétence qui lui a été conférée par l’assemblée générale ordinaire et extraordinaire des actionnaires du 16

Si vous choisissez de faire mesurer l’œil au laser, vous devrez payer les frais connexes lors du rendez-vous (en espèces ou par chèque). SI VOUS POR- TEZ DES VERRES DE CONTACT,

Vous pensez bien, Monsieur, que vos traites, c'est comme si j'avais de l'argent, mais il me faut une certaine somme comptant pour effectuer des versements à Paris.. Et mon

Votre enfant doit être opéré des végétations : c’est l’adénoïdectomie.. Les végétations sont constituées d’un tissu lymphoïde normal, situé

Lors d'une réunion, les 246 personnes présentes se sont installées sur des tables de 6 places.. Combien de tables

Lors d'une réunion, les 246 personnes présentes se sont installées sur des tables de 6 places.. Combien de tables