x64 opcodes movabs und r11



  • Hallo

    Ich möchte gerne den movabs Mnemonic verwenden unter x64 damit ich mit

    movabs r11 ,0x0000000000000000
    jmp r11
    

    ein absolute Adresse in das unbenützte r11 register laden kann und dann ein indirekten unbedingten Sprung ausführen kann. Aber wenn ich das im VS2008 im debugger anschaue und ein bisschen trace finde ich

    mov r11 ,offset MyMessageBoxA

    warum das? warum nicht movabs? den ich habe in meinem array am Anfang explizit den opcode 0x49 dann 0xbb für das r11 register. Was ich auch nicht verstehe ist das in diesem Dokument die beiden opcodes irgendwie für mich nicht zu finden sind. 0x49 steht da für REX.WB , was ist das? doch nicht für movabs oder?

    Wäre schön wenn mich jemand aufklären kann



  • Hier ist noch die page mit der Referenz zu den opcodes unter x64.

    http://ref.x86asm.net/geek64-abc.html



  • Der mnemonic MOVABS existiert nicht. Damit ist vermutlich eine der Kodierungen des MOV Befehls gemeint (z.B. MOV reg64,imm64 oder MOV rax/[imm64],[imm64]/rax).



  • Es gibt da "movaps", aber das ist ein SSE Opcode um an 16-Byte-Grenzen ausgerichtet 128Bit Werte in aus dem Speicher in die SSE Register zu bewegen.

    Aber "movabs" sieht für mich auch auch wie eine Codierung einer MOV-Gruppe aus... Ah na klar, dass sind die 64Bit Pseudoopcodes des GNU Assemblers, sie gehören zu der Gruppe "MOV Areg, [Offs64]" und "MOV [Offs64], Areg", Areg steht hier für die A Register (EAX, RAX ...) ... Die habe ich schon lange nicht mehr gesehen 😃


Log in to reply