8
votes

Assemblée, Hello World Question

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


0 commentaires

3 Réponses :


8
votes

Lorsque vous appelez int 0x80 , le noyau examine la valeur du registre EAX 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 s'attend à ce que les registres soient configurés comme suit:

  • EAX contient 4
  • EBX contient le descripteur de fichier
  • ECX contient l'adresse des données à écrire
  • EDX contient le nombre d'octets

    Pour d'autres informations approfondies, voir Appels système Linux .


2 commentaires

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 dans l'arborescence source du noyau.



0
votes

Il y a trop d'appels de systèmes pour y avoir une instruction de montage différente pour chacun.

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.

Les appels système sont répertoriés à l'intérieur du noyau.


1 commentaires

Merci. Où, exactement, je regarde les appels système dans le noyau?



2
votes
section .data

msg db 'Hello, world!',0xa ;our dear string
len equ $ - msg ;length of our dear string

0 commentaires