Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: x64core en 19 Septiembre 2012, 02:29 am



Título: Pregunta Acerca de inline...
Publicado por: x64core en 19 Septiembre 2012, 02:29 am
hey chicos, alguien sabe que tan seguro es escribir C con inline assembly ?
por ejemplo tengo una funcion en la que tengo muchas estructuras y necesito usar inline assembly y he visto
gente guardando los registros antes de usarlos, es esto necesario?
o el compilador puede determinar eso?
por ejemplo si en uno de los registros hay una direccion a mi estructura que el compilador asigna para despues usar esa direccion
pero en el inline  utilizo ese registro para guardar otro valor, seria correcto?
o SIEMPRE de debe primero guardar los registros antes de usarlos? o el compilador puede determinar ...? y guardar su propia copia?
bueno supongo debido a que me he fijado que ahora los compiladores son bien avanzados, no me extrañaria que puedan
hacer eso... pero me gustaria saber la verdad acerca de eso  ::)

hice algunas programas de pruebas usando algunos registros y no me dio problema... pero en nuestros codigos de cientos de lineas?


Título: Re: Pregunta Acerca de inline...
Publicado por: avesudra en 19 Septiembre 2012, 19:46 pm
Hay muchísima gente , que para utilizar inline assembly hace:

PUSHAD : Guarda todo los registros en la pila.
POPA    : Saca todos los registros de la pila.
¿Que si es bueno? Pues no sé , se utiliza como método de seguridad , el compilador de C , para las funciones siempre hace el mismo proceso:
Código
  1. push ebp
  2. mov ebp,esp
  3. mov eax,[ebp+4];Primer argumento si se pasa un int a la función.
  4. ;más código...
  5. pop ebp
  6. leave
  7. ret
Por lo que si hacemos un PUSHA y un POPA , nos aseguramos de que los registros estén igual , nada más.Otra manera es compilar a ASM , que el gcc tiene para hacer eso , y mirar como queda el código , o ejecutarlo y si falla ya sabes que algo tiene que haber.En cuanto al compilador creo que no puede hacerlo, es algo que si lo ponen los programadores será porque no está ahí para no hacer nada.

¡Un saludo!