J'apprends l'ASM sur Linux (noobuntu 10.04) J'ai reçu le code suivant de: http://asm.sourceforge.net/intro/hello. HTML
section .text global _start ;must be declared for linker (ld) _start: ;tell linker entry point mov edx,len ;message length mov ecx,msg ;message to write mov ebx,1 ;file descriptor (stdout) mov eax,4 ;system call number (sys_write) int 0x80 ;call kernel mov eax,1 ;system call number (sys_exit) int 0x80 ;call kernel section .data msg db 'Hello, world!',0xa ;our dear string len equ $ - msg ;length of our dear string
3 Réponses :
Lorsque vous appelez Pour d'autres informations approfondies, voir Appels système Linux . P> int 0x80 code>, le noyau examine la valeur du registre
EAX code> pour déterminer la fonction que vous souhaitez appeler (ceci est le "numéro SYSCALL") . Selon ce numéro, le reste des registres est interprété pour signifier des choses spécifiques. L'appel
sys_write code> s'attend à ce que les registres soient configurés comme suit: P>
EAX code> contient 4 li>
EBX code> contient le descripteur de fichier li>
ECX code> contient l'adresse des données à écrire li>
EDX code> contient le nombre d'octets li>
ul>
Merci beaucoup, c'était ma suspicion et toujours utilable ... Pouvez-vous me dire où je peux en apprendre davantage? Ces entiers SysCall sont-ils dans les pages de l'homme?
Vous devez creuser des types de fichiers d'en-tête de source Linux pour trouver les numéros d'appel système. Je n'ai pas de machine de Linux à portée de main pour le moment, je ne peux donc pas vous dire l'emplacement exact, mais c'est quelque chose comme include / asm / syscall.h code> dans l'arborescence source du noyau.
Il y a trop d'appels de systèmes pour y avoir une instruction de montage différente pour chacun. p>
Au lieu de cela, vous appelez l'instruction de piège. La valeur de EAX détermine quel appel système sera invoqué. Les autres registres sont les arguments à l'appel du système. P>
Les appels système sont répertoriés à l'intérieur du noyau. P>
Merci. Où, exactement, je regarde les appels système dans le noyau?
section .data msg db 'Hello, world!',0xa ;our dear string len equ $ - msg ;length of our dear string