windows - Hvad er formålet med 40h REX opcode i ASM x64?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har forsøgt at forstå formålet med 0x40 REX opcode til ASM x64 instruktioner. Som for eksempel i denne funktion prolog fra Kernel32.dll:


Indtast billedbeskrivelse her [19]


Som du ser, bruger de push rbx som:


40 53      push        rbx 


Men ved at bruge bare 53h opcode (uden præfikset) produceres også det samme resultat:


Indtast billedbeskrivelse her [20]


Ifølge dette websted er layoutet for REX-præfiks som følger: [21]


Indtast billedbeskrivelse her [22]


40h opcode synes ikke at gøre noget. Kan nogen forklare sit formål?

Bedste reference


04xh bytes (dvs. 040h, 041h ... 04fh) er faktisk REX bytes. Hver bit i den nederste nibble har en mening, som du er nævnt i dit spørgsmål. Værdien 040h betyder at REX.W, REX.R, REX.X og REX.B er alle 0. Det betyder, at tilføjelsen af ​​denne byte ikke gør noget ved denne instruktion, fordi du ikke overstyrer nogen standard REX-bits, og det er ikke en 8-bit instruktion med AH/BH/CH/DH som operand.


Desuden svarer X, R og B bits til nogle operander. Hvis din instruktion ikke bruger disse operander, ignoreres den tilsvarende REX bit.