2017-08-15 3 views
0

J'ai écrit le code assembleur suivant comme prescrit par mon livre de texte dans le processeur Intel 64 syntaxe bitAssemblée Langue erreur nasm

Section .text 
global _short 
_start: 
     jmp short Gotocall 
shellcode: 
     pop    rcx 
     xor    eax,eax 
     mov byte  [rcx+8], al 
     lea    rdi, [rax] 
     mov long  [rcx+8], rdi 
     mov long  [rcx+12], eax 
     mov byte  al, 0x3b 
     mov    rsi, rax 
     lea    rdi, [esi+8] 
     lea    edx, [esi+12] 
     int    0x80 

Gotocall: 

     call   shellcode 
     db    '/bin/shJAAAAKKKK' 

mais je reçois une erreur de nasm dans la ligne 10 comme celui-ci asmshell.asm: 10 : erreur: discordance dans les tailles d'opérande Quelqu'un peut-il me dire quelle erreur est leur dans mon code.

Et quelqu'un peut-il s'il vous plaît me dire quelques bonnes références aux instructions d'assemblage Intel 64 bits.

+0

Et comment essayez-vous invoquez 'nasm', comment voulez-vous construire votre programme? –

+0

@Someprogrammerdude j'utilise cette commande nasm -f elf64 asmshell.asm –

+0

Si votre manuel conseille 'mov byte al, 0x3b' est-ce bon? Quelle autre taille peut-on avoir? –

Répondre

0

Si vous voulez dire l'erreur est en ligne 10

mov long [rcx+8], rdi 

J'étais sur le point de vous demander quelle taille long qualificatif est, mais la ligne suivante

mov long [rcx+12], eax 

montre que vous déplacez deux différents tailles de registre à la même destination de taille. Dans le premier cas, le registre 64 bits rdi, dans le second cas, le registre 32 bits eax, et long ne peuvent pas les satisfaire tous les deux.

Pourquoi ne pas simplement abandonner le long car en spécifiant le registre, l'assembleur connaît la taille de la destination? Mais malheureusement, vous n'avez autorisé que 4 octets de mémoire pour stocker un registre 64 bits, donné par le [rcx+8] suivi par [rcx+12].

Peut-être que vous aviez l'intention

mov long [rcx+8], edi 
+0

merci @WeatherVane je l'ai corrigé et maintenant il compile en douceur. Le langage d'assemblage peut parfois être frustrant. –