J'apprends asm sur Linux (noobuntu 10,04) j'ai obtenu le code suivant au large de: http://asm.sourceforge.net/intro/hello.htmlAssemblée, bonjour question mondiale
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
Il est un monde simple bonjour. Fonctionne sur Linux + appelle le noyau directement (apparemment). Quelqu'un peut-il expliquer ce qui se passe vraiment ici? Je pense qu'il lit les nombres entiers dans les registres & ebx du processeur enregistre & ecx, edx data et qui définit l'appel système lorsque le noyau est appelé. Si oui, est-ce que différentes combinaisons d'entiers définissent différents appels système quand int 0x80 est appelé?
Je ne suis pas bon avec les pages de manuel, mais j'ai lu tous les liens que je peux trouver, est-ce qu'une page de manuel me dit quelles combinaisons définissent les appels système?
TOUTE aide est appréciée. Une ligne par ligne d'explication serait incroyable ... -Merci à l'avance Jeremy
Merci beaucoup, c'était mon soupçon et utile néanmoins ... Pouvez-vous me dire où je peux en savoir plus? Ces entiers syscall sont-ils dans les pages man? – Jeremy
Vous devez creuser un peu en profondeur dans les fichiers d'en-tête source Linux pour trouver les numéros d'appel système. Je n'ai pas de machine Linux à portée de main pour le moment, donc je ne peux pas vous dire l'emplacement exact, mais c'est quelque chose comme 'include/asm/syscall.h' dans l'arborescence des sources du noyau. –
merci beaucoup, vous avez été utile. – Jeremy