Comment pousser un 64 bits int dans les MSNA?
Je suis en train de pousser un entier 64 bits, mais lors de l'assemblage de MSNA semble vouloir voir comme une valeur DWORD pas un QWORD.
Je suis à l'aide de l'ASM à créer le shellcode j'ai besoin d'injecter une DLL 64 bits en 64 bits processus. La première QWORD est l'ancien pointeur d'instruction, le second est l'adresse contient l'adresse de la DLL, le troisième est l'adresse de la fonction LoadLibrary. Les espaces réservés sont remplies au moment de l'exécution.
section .text
global _start
_start:
BITS 64
PUSH QWORD 0xACEACEACACEACEAC
PUSHFQ
push rax
PUSH QWORD 0xACEACEACACEACEAC
MOV RAX, 0xACEACEACACEACEAC
CALL RAX
pop RAX
POPFQ
RETN
Connexes: puis-je ajouter 64bit constantes à 64 bits des registres? pour un ALU-instruction version de ce, et de voir aussi
mov r64, imm64
vs de le charger à partir de la mémoire.OriginalL'auteur user2272296 | 2013-06-04
Vous devez vous connecter pour publier un commentaire.
Il n'y a pas de
push imm64
instruction. Comme solution de contournement, vous pouvez effectuer l'une des opérations suivantes:mov rax, 0xACEACEACACEACEAC; push rax
push qword [rel foo]
push dword low32; mov dword [rsp+4], high32
ousub rsp,8; mov dword [rsp], low32; mov dword [rsp+4], high32
Ce n'est pas très différente de choix #3, pourquoi n'est-ce pas bon?
Oh ouais, ne pas s'en rendre compte. Merci pour l'aide.
Il ne semble pas être un moyen pour coder
push
avec un 32 bits opérande de taille de toute façon. (Même avec un registre source). Intel insn ref manuel dit, vous pouvez, avecREX.W
, mais il ne fonctionne pas avec les MSNA/YASM/GNU, ou sur un CPU réel (par collage d'undb 0x40
(REX.W=0) oudb 0x48
(REX.W=1) en face depush rdx
). Testé sur Intel (Bns), tandis que pas à pas à l'aide de GDB.En outre, la méthode 1 est presque certainement le meilleur, dans la mesure globale de la performance et de la taille du code.
push m32
(2 ) décode à 2 uop sur les processeurs Intel et AMD, et la charge peut manquer dans le cache. (En supposant que 4 il n'est pas utilisable.)OriginalL'auteur Jester