Foro de elhacker.net

Programación => ASM => Mensaje iniciado por: Debci en 9 Noviembre 2009, 22:04 pm



Título: Dudas varias, simples pero grandes para un noob como yo ^^
Publicado por: Debci en 9 Noviembre 2009, 22:04 pm
Hola amigos, me ha gustado ensamblador, y quiero aprender mas, en concreto son las siguientes dudas:

1- que significa que:
Código
  1. int 0x80
Llama al kernel? Que es 0x80?
2- En el siguiente codigo:
Código
  1. section .text
  2.    global _start ;must be declared for linker (ld)
  3.  
  4. _start: ;tell linker entry point
  5.  
  6. [s]mov edx,len ;message length[/s]
  7. mov ecx,msg ;message to write
  8. mov ebx,1 ;file descriptor (stdout)
  9. mov eax,4 ;system call number (sys_write)
  10. int 0x80 ;call kernel
  11.  
  12. mov eax,1 ;system call number (sys_exit)
  13. int 0x80 ;call kernel
  14.  
  15. section .data
  16.  
  17. msg db 'Hello, world!',0xa ;our dear string
  18. [s]len equ $ - msg ;length of our dear string[/s]
  19.  
se que el segundo subrallado calcula los bytes que ocupa la llamada al hola, pero como puedo especificar desde donde quiero contra bytes? Para que sirve en un hello world una lectura de este tipo si ni si quiera la expresamos en pantalla?
Que significa el primer subrallado?

3-que son:
section   .text
_start:   
section   .data

Deduzco que deben ser clases o metodos del ensamblador, pero no lo concretizo.

Muchas gracias a todos, me estais haciendo una persona bien cultivada.

Saludos


Título: Re: Dudas varias, simples pero grandes para un noob como yo ^^
Publicado por: Eternal Idol en 9 Noviembre 2009, 22:14 pm
1- que significa que:
Código
  1. int 0x80
Llama al kernel? Que es 0x80?

0x80 es el numero de interrupcion (http://en.wikipedia.org/wiki/Interruption) que sera llamada, es la elegida por Linux como interfaz (http://en.wikipedia.org/wiki/System_call) para sus servicios  (los manejadores de interrupcion estan en modo Kernel).

2- En el siguiente codigo:
se que el segundo subrallado calcula los bytes que ocupa la llamada al hola, pero como puedo especificar desde donde quiero contra bytes? Para que sirve en un hello world una lectura de este tipo si ni si quiera la expresamos en pantalla?
Que significa el primer subrallado?

Los cuenta desde esa posicion, justo despues del final de msg. ¿A que lectura te referis? Solo hay una escritura en pantalla ... eso pone en el registro edx el valor de len.

3-que son:
section   .text
_start:   
section   .data

Deduzco que deben ser clases o metodos del ensamblador, pero no lo concretizo.

No, son secciones del ejecutable, la sección de codigo y la de datos mas precisamente (ver ELF (http://en.wikipedia.org/wiki/Executable_and_Linkable_Format) y PE (http://en.wikipedia.org/wiki/Portable_executable) por ejemplo).


Título: Re: Dudas varias, simples pero grandes para un noob como yo ^^
Publicado por: Debci en 9 Noviembre 2009, 22:20 pm
que diferencia hay entre usar un registro u otro? Vienen a ser como almacenes de memoria?

Saludos


Título: Re: Dudas varias, simples pero grandes para un noob como yo ^^
Publicado por: Eternal Idol en 9 Noviembre 2009, 22:27 pm
que diferencia hay entre usar un registro u otro?

Existen diferentes convenciones de llamada, esto lo escribi antes sobre la de usada por los servicios de Linux:

A grosso modo en Linux se pone en eax el numero del servicio y los siguientes parametros van en ebx, ecx, edx, esi, edi y ebp.

En /usr/include/asm/ unistd.h/unistd_32.h/unistd_64.h encontraras los numeros de los servicios.



que diferencia hay entre usar un registro u otro? Vienen a ser como almacenes de memoria?

Si: registro (http://en.wikipedia.org/wiki/Processor_register).


Título: Re: Dudas varias, simples pero grandes para un noob como yo ^^
Publicado por: Debci en 9 Noviembre 2009, 22:36 pm
Muchas gracias!

Saludos


Título: Re: Dudas varias, simples pero grandes para un noob como yo ^^
Publicado por: Eternal Idol en 9 Noviembre 2009, 22:41 pm
De nadas  :)