Código basura de GCC?

Iniciado por lweb20, 1 Marzo 2013, 01:12 AM

0 Miembros y 1 Visitante están viendo este tema.

lweb20

Sí eso es lo que pensaba, pero el único debugger que "conozco" (entre comillas) es bochs y la verdad que con mis pocos conocimientos de asm (me confunde muchas instrucciones) no me ayuda mucho. Lo que me ayuda más es el print, es decir voy imprimiendo "estados" como pseudocódigo en la pantalla (obviamente puede fallar cuando se trata de problemas en el administrador de memoria, pero si no hay problemas sí sirve). En el caso del esp, ebp, esi y edi estoy super perdido. La mayoría de los manuales y guías están en inglés y la verdad que yo me confundo cuando es demasiado contenido. No es que no quiera estudiar o algo por el estilo sino que es mucho más sencillo leer información en español hasta incluso testear códigos e ir poco a poco solucionando los problemas a leer un manual inmenso en inglés (que me defiendo pero como digo me confundo si es demasiado). Puedo entender una cosa y es otra o cosas así. Gracias por todo, me diste ánimos ya que me había desanimado. Bueno mientras estaba solucionando ese problema del gcc también creaba un algoritmo para ejecutar programas PE y sí que es más difícil de lo que pensaba.

avesudra

#11
Ensamblador en teoría es fácil de aprender  porque tiene "pocas instrucciones"(muchas menos que otros lenguajes) pero vamos lo de los registros no es complicado encontrar su uso (los registros son de 16, 32 y 64 bits respectivamente):


  • AX/EAX/RAX: se usan como acumulador
  • BX/EBX/RBX: se usan como base de indexación (para los arrays)
  • CX/ECX/RCX: se usan como contador
  • DX/EDX/RDX: para datos y en general
  • SI/ESI/RSI: se usa como fuente (apuntando a una cadena) para operaciones con cadenas.
  • DI/EDI/RDI: se usa como destino para operaciones con cadenas.
  • SP/ESP/RSP: apunta a lo alto de la pila
  • BP/EBP/RBP: se usa como puntero base de la pila para mantener la dirección del marco de pila actual.
  • IP/EIP/RIP: apunta a la instrucción que se está ejecutando.

De todas maneras puedes hacer uso del manual de intel(no está en español) para encontrar el uso de cualquier registro o instrucción:
http://download.intel.com/products/processor/manual/253666.pdf
Este libro está en español y no está nada mal:
http://foro.elhacker.net/asm/lenguaje_ensamblador_para_computadoras_basadas_en_intelkip_r_irvine_espanol-t364651.0.html
Regístrate en

lweb20

Gracias por la información avesudra pero juraba que las instrucciones estaban dentro de la CPU

avesudra

Cita de: lweb20 en  4 Marzo 2013, 00:31 AM
Gracias por la información avesudra pero juraba que las instrucciones estaban dentro de la CPU
Bueno, es la CPU quien las interpreta. Creo que me has entendido mal porque no he dicho que estén fuera  :laugh:

Por cierto bastante interesante el post, que chulo tener tu S.O.
Regístrate en

lweb20

#14
Cita de: avesudra en  4 Marzo 2013, 00:34 AM
Bueno, es la CPU quien las interpreta. Creo que me has entendido mal porque no he dicho que estén fuera  :laugh:

Por cierto bastante interesante el post, que chulo tener tu S.O.

CitarEnsamblador en teoría es fácil de aprender  porque tiene "pocas instrucciones"(muchas menos que otros lenguajes)

:laugh:


Está bueno el manual, muy bueno  ;-)

x64core

Cita de: lweb20 en  4 Marzo 2013, 00:36 AM
:laugh:
+1

@Avesudra, aprender bien el tutorial basico de ensamblador que estas leyendo

avesudra

Cita de: x64Core en  4 Marzo 2013, 00:47 AM
+1

@Avesudra, aprender bien el tutorial basico de ensamblador que estas leyendo
No lo estoy leyendo, quizás no debería haber dicho nada, por eso he puesto lo de "en teoría". Me refería a que las instrucciones de ensamblador son más fáciles de aprender o recordar que todos los nombres de las funciones de la librería math o string de C. Se me ha tomado como un idiota pero vamos prefiero que me lo digan claro a que lo hagan con una sonrisa. Disculpad mi ignorancia.

¡Un saludo!
Regístrate en

lweb20

#17
Sí xD pensé que me estaba equivocando y me pareció gracioso cuando comentaste eso.

Bueno, alguien sabe si no es mucha molestia un manual de modo protegido en español. Me serviría bastante. No importa si es asm (que sea sintaxis intel por favor) o si es C/C++. Gracias.

Sobre todo ejecutar de alguna forma interrupciones de la BIOS mediante out o algo así :P


Para Eternal Idol 7D:

Logré hacer algo interesante con el código que me pasaste:

Antes que nada el pusha y popa son necesarios ya que me mueve la pila creo el programa (esp creo).

_asm pusha
int r = ((int(*)(void))programa)();
_asm popa

pantalla.Escribir("\nEl resultado de la aplicación fue: %i", r);

Eternal Idol

#18
pusha y popa ponen y sacan todos los registros generales de la pila (por eso decia antes que los preservabas, antes y despues de la llamada tendran el mismo valor de esa manera).

http://css.csail.mit.edu/6.858/2010/readings/i386/PUSHA.htm
http://css.csail.mit.edu/6.858/2012/readings/i386/POPA.htm

¿Que pasa si usas push EBX y POP EBX? ¿Funciona? Si es asi es por lo que te explique antes. Por cierto cuando haces un call tambien se mueve la pila, para poner la direccion de retorno.

PD. Si queres informacion sobre otros temas te recomiendo Google y sino el sub/foro que corresponda asi no desviamos este hilo que esta practicamente resuelto.
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

lweb20

ah ok perdon no sabía gracias. Hasta otro hilo :) DECLARO FIN DEL TEMA