2015-03-17 1 views
0

Je ne sais pas pourquoi, mais quand j'utilise l'hexagone inférieur code comme code shell cela fonctionne:shellcode - Code simplifed ne fonctionne pas

Section .text 
global _start 
_start: 
mov ebx,0 
mov eax,1 
int 0x80 

mais quand j'utilise l'hexagone du code ci-dessous à la place, il ne pas de travail et de segmentation faute se produit:

Section .text 
global _start 
_start: 
xor ebx,ebx 
mov al,1 
int 0x80 

Je sais que c'est parce que vous utilisez 'al'. Je ne sais pas pourquoi l'utilisation de 'eax' fonctionne correctement mais l'utilisation de 'al' entraîne une erreur?

Merci beaucoup.

Ya Ali.

Répondre

1

Parce que int 0x80 attend paramètre 32 bits. Lorsque vous passez seulement 8 bits (AL), les parties hautes de eax peuvent contenir n'importe quoi (valeur indéfinie), donc au lieu de passer 1 vous finissez par passer 0x ?????? 01

+0

Merci. Je lis 2 livres qui utilisent 'al' sans aucune erreur. Comment peut-on utiliser 'al' correctement? –

+0

xor eax, eax \ mov al, 1, mais pourquoi? Quel est le problème avec eax? –

+0

Dans le shellcode '\ x00' ne doit pas apparaître. Lorsque nous utilisons 'eax' \ x00 est apparu. avec l'utilisation de 'al', il n'y a plus de \ x00 –