estoy aprendiendo asm en Linux (noobuntu 10.04) tengo el siguiente código fuera de: http://asm.sourceforge.net/intro/hello.htmlAsamblea, hola pregunta mundo
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
Es un mundo simple hola. Se ejecuta en Linux + llama al núcleo directamente (aparentemente). ¿Puede alguien explicar por favor qué está pasando realmente aquí? Creo que lee los enteros en eax & El procesador ebx registra & ecx, edx data y eso define la llamada al sistema cuando se llama al kernel. Si es así, ¿las diferentes combinaciones de números enteros definen llamadas de sistema diferentes cuando se llama a int 0x80?
No soy bueno con las páginas de manual, pero he leído todas las relacionadas que puedo encontrar, ¿alguna página man me dice qué combinaciones definen qué llamadas de sistema?
CUALQUIER ayuda es apreciada. Una línea por línea explicación sería increíble ... -Gracias por adelantado Jeremy
Muchas gracias, esta fue mi sospecha y útil, sin embargo ... ¿Me puede decir dónde puedo obtener más información? ¿Estos números enteros de syscall están en las páginas man? – Jeremy
Tienes que profundizar un poco en los archivos de encabezado fuente de Linux para encontrar los números de llamada del sistema. No tengo una máquina Linux a la mano en este momento, así que no puedo decir la ubicación exacta, pero es algo así como 'include/asm/syscall.h' en el árbol fuente del kernel. –
muchas gracias, has sido útil. – Jeremy